uva - 311 - Packets(贪心)

来源:互联网 发布:合金装备5幻痛捏脸数据 编辑:程序博客网 时间:2024/06/08 15:12

题意:1x1 到 6x6 的行李,要装在 6x6 的箱子里,求最小的箱子数。

方法:贪心。参考:http://blog.csdn.net/goomaple/article/details/7822004  

2x2为负用1x1补正很好,希望大家借鉴。

AC代码:

#define Local#include <iostream>        #include <iomanip>        #include <string>        #include <cstring>        #include <cstdio>        #include <queue>        #include <stack>        #include <algorithm>        #include <cmath>        #include <ctime>    using namespace std; int p[7], sum;void judge_1(){if (p[2] < 0){p[1] += p[2] * 4;p[2] = 0;}}void judge_2(int a, int b){p[2] -= a;p[1] -= b;judge_1();}int main(){#ifdef Localfreopen("a.txt", "r", stdin);#endifwhile (true){int flag = 0;sum = 0;for (int i = 1; i <= 6; i++){cin >> p[i];flag += p[i];}if (!flag)break;sum += p[6];if (p[5]){sum += p[5];p[1] -= p[5] * 11;}if (p[4]){sum += p[4];p[2] -= p[4] * 5;judge_1();}if (p[3]){int mod = p[3] % 4;sum += p[3] / 4;if (mod){++sum;if (1 == mod)judge_2(5, 7);else if (2 == mod)judge_2(3, 6);else if (3 == mod)judge_2(1, 5);}}if (p[2] > 0){int mod = p[2] % 9;sum += p[2] / 9;if (mod){++sum;p[1] -= 36 - mod * 4;}}if (p[1] > 0){int mod = p[1] % 36;sum += p[1] / 36;if (mod)++sum;}cout << sum << endl;}return 0;}


0 0
原创粉丝点击