POJ 1017 Packets(贪心)
2010-02-17 01:51
453 查看
//用贪心算法,从最大的装起, //5*5->1*1; //4*4->2*2->1*1; //3*3分3种情况 //模4后剩1,剩2,剩3 //剩1的最多可再装5个2×2,再补1×1 //剩2的最多可装4个2×2,再补1×1 //剩3的只能装多1个2×2,再补1×1 #include<iostream> using namespace std; int main() { int a[7],n,c; // n为数量,c为容量 for(;;) { n = 0;c = 36; for(int i = 1;i <= 6;++i) cin >> a[i]; if(a[1] + a[2] + a[3] + a[4] + a[5] + a[6] == 0)break; n += a[6]; while(a[5] != 0) { c -= 25; --a[5]; ++n; while(c > 0 && a[1] > 0) { c--; a[1]--; } c = 36; } while(a[4] != 0) { c -= 16; ++n; --a[4]; while(c > 0 && a[2] > 0) { c -= 4; a[2]--; } while(c > 0 && a[1] > 0) { c--; a[1]--; } c = 36; } if(a[3] >= 4) { n += a[3] / 4; a[3] %= 4; } if(a[3] == 1) { c -= 9; ++n; while(c > 7 && a[2] > 0) { --a[2]; c -= 4; } while(c > 0 && a[1] > 0) { --a[1]; c -= 1; } c = 36; } if(a[3] == 2) { c -= 18; ++n; while(c > 6 && a[2] > 0) { --a[2]; c -= 4; } while(c > 0 && a[1] > 0) { --a[1]; c -= 1; } c = 36; } if(a[3] == 3) { c -= 27; ++n; while(c > 5 && a[2] > 0) { --a[2]; c -= 4; } while(c > 0 && a[1] > 0) { --a[1]; c -= 1; } c = 36; } n += a[2]/9; a[2] %= 9; if(a[2] > 0) { ++n; c -= a[2]*4; while(a[1] > 0 && c > 0) { --a[1]; --c; } } n += a[1] / 36; a[1] %= 36; if(a[1] > 0) ++n; cout << n << endl; } return 0; }
相关文章推荐
- POJ 1017 - Packets(贪心+模拟)
- POJ 1017 Packets【贪心】
- POJ 1017 Packets(简单贪心)
- 贪心+模拟-poj-1017-Packets
- Poj 1017 Packets(贪心策略)
- poj 1017 packets (贪心)
- Poj 1017 Packets(贪心策略)
- poj 1017 Packets ( 贪心 )
- poj-1017 Packets (贪心)
- POJ 1017Packets(贪心)
- Poj 1017 Packets(贪心策略)
- Packets(POJ 1017, 贪心)
- POJ 1017 Packets-装格子 (简单贪心)
- poj 1017 Packets(贪心)
- 【贪心】【POJ-1017】Packets
- POJ 1017 Packets 贪心
- POJ 1017 Packets (贪心)
- POJ 1017-Packets(贪心)
- POJ1017——Packets(贪心)
- poj 1017 Packets 贪心