UVa 311 - Packets
来源:互联网 发布:西班牙语同声传译软件 编辑:程序博客网 时间:2024/09/21 06:35
題目:有1x1,2x2,3x3,4x4,5x5,6x6的方塊若干,問最少用幾個6x6的盒子可以放下。
分析:貪心。1x1的用來填充剩餘空間即可,任何空間都可以放下;
首先,每個6x6,5x5,4x4都要單獨占一個盒子,因此把剩餘的空間填充2x2,1x1為最優;
然後,剩下3x3,2x2,先按填滿的放置(4個3x3,9個2x2安組分配為最優);
最後,剩下3x3少於4個,2x2少於9個,最多需要兩個盒子,1x1最後填充即可。
(证明第二步、第三步为最优方式,一共36種組合,其中占2个盒子的为:
<1,6>,<1,7>,<1,8>,<1,6>,
<2,4>,<2,5>,<2,6>,<2,7>,<2,8>
<3,2>,<3,3>,<3,4>,<3,5>,<3,6>,<3,7>,<3,8>
對於每種情況分別加入<4,9>重新分配,,無法得到更小盒子數量,因此為最優分配)
說明:開始沒看出是貪心,利用dp求解3x3與2x2的分配方式╮(╯▽╰)╭。
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>using namespace std;int block[7];int maps[5][10] = {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2};int dp[505][505];int main(){while (~scanf("%d",&block[1])) {int sum = block[1];for (int i = 2; i <= 6; ++ i) {scanf("%d",&block[i]);sum += block[i];}if (!sum) break;//6x6int count = block[6];//5x5count += block[5];block[1] -= min(block[1], 11*block[5]);//4x4count += block[4];if (5*block[4] > block[2]) {block[1] -= min(block[1], 20*block[4]-4*block[2]);block[2] = 0;}else {block[2] -= 5*block[4];}/*//dpfor (int i = 0; i <= block[3]; ++ i)for (int j = 0; j <= block[2]; ++ j)dp[i][j] = 100001;for (int i = 0; i <= 4; ++ i)for (int j = 0; j <= 9; ++ j)dp[i][j] = maps[i][j];for (int i = 0; i <= block[3]; ++ i)for (int j = 0; j <= block[2]; ++ j) {if (i >= 4 && j >= 0 && dp[i][j] > dp[i-4][j-0])dp[i][j] = dp[i-4][j-0]+1;if (i >= 3 && j >= 1 && dp[i][j] > dp[i-3][j-1])dp[i][j] = dp[i-3][j-1]+1;if (i >= 2 && j >= 3 && dp[i][j] > dp[i-2][j-3])dp[i][j] = dp[i-2][j-3]+1;if (i >= 1 && j >= 5 && dp[i][j] > dp[i-1][j-5])dp[i][j] = dp[i-1][j-5]+1;if (i >= 0 && j >= 9 && dp[i][j] > dp[i-0][j-9])dp[i][j] = dp[i-0][j-9]+1;}//dp *///贪心 //3x3count += block[3]/4;block[3] %= 4;//2x2count += block[2]/9;block[2] %= 9;//贪心 count += maps[block[3]][block[2]];count += (block[1]+9*block[3]+4*block[2]-36*maps[block[3]][block[2]]+35)/36;printf("%d\n",count);} return 0;}
0 0
- UVa 311 - Packets
- UVa 311 - Packets
- uva 311 - Packets
- uva 311 - Packets
- UVa 311 - Packets
- uva 311 Packets
- UVa:311 Packets
- uva 311 Packets
- uva 311Packets
- UVA - 311 Packets
- UVa 311 - Packets
- uva 311 Packets
- UVA - 311 Packets
- Uva 311 Packets
- UVA 311 Packets(贪心 + 模拟)
- uva 311 Packets(贪心)
- UVA 311 Packets 贪心+模拟
- uva - 311 - Packets(贪心)
- 多态学习日志
- 2015072707 - 人性本恶
- 四层和七层负载均衡
- css hack for ie
- iOS中的MVC模式
- UVa 311 - Packets
- 杭电acm阶段之理工大版
- 初学者之php基础(二)
- letcode - Dungeon Game
- hdu 4723 How Long Do You Have to Draw(贪心)
- 关于EasyUI-tree的一些操作
- linux中ctrl+z和ctrl+c的区别
- 通过“分布式系统的8大谬误”反思APP的设计 第五篇 谬误5:网络拓扑结构是不会改变的
- 简单实用H5的FormData对象上传文件