题目大意:有1X1,2X2 ... 5X5,6X6六种类型的物品,把他们装进6X6的盒子里,求使用的最少盒子数。
贪心吧,其实一看就知道思路了,算是常识吧,装物品时通常都是先装大的,再在其余空间放小的。一点一点敲代码就好了。
1 #include2 3 int main() 4 { 5 #ifdef LOCAL 6 freopen("in", "r", stdin); 7 #endif 8 int a[7]; 9 while (scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) != EOF)10 {11 if (!a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6]) break;12 int ans = 0;13 if (a[6] > 0)14 {15 ans += a[6];16 }17 if (a[5] > 0)18 {19 ans += a[5];20 a[1] -= a[5] * 11;21 }22 if (a[4] > 0)23 {24 ans += a[4];25 a[2] -= a[4] * 5;26 if (a[2] < 0)27 {28 a[1] -= -4 * a[2];29 a[2] = 0;30 }31 }32 if (a[3] > 0)33 {34 ans += (a[3]+3) / 4;35 int t = a[3] % 4;36 switch(t)37 {38 case 1:39 a[2] -= 5;40 a[1] -= 7;41 break;42 case 2:43 a[2] -= 3;44 a[1] -= 6;45 break;46 case 3:47 a[2] -= 1;48 a[1] -= 5;49 break;50 }51 }52 if (a[2] > 0)53 {54 ans += (a[2]+8) / 9;55 int t = a[2] % 9 * 4;56 a[1] -= 36 - t;57 }58 if (a[1] > 0) ans += (a[1]+35) / 36;59 printf("%d\n", ans);60 }61 return 0;62 }
代码可以再精简,不过精简之后思路就不如这个直接了,其实是我想偷懒啦,哈哈