链接http://poj.org/problem?id=1017
这题是《程序设计引导及在线实践》上的题 ”装箱问题“
题意就不说了。
解法是贪心,先装大的,大的装不满再装小的,直到装满或用完箱子。
《程序设计引导及在线实践》上把各种情况分析的很清楚。只是想不出书上的代码。
#include<iostream>
using namespace std;
int main()
{
int p1,p2,p3,p4,p5,p6,a,r;//r为每种情况剩余体积
int sum;
while(scanf("%d%d%d%d%d%d",&p1,&p2,&p3,&p4,&p5,&p6),p1+p2+p3+p4+p5+p6)
{
sum=0;
sum=sum+p6+p4+p5+p3/4;
if(p5)
{
r=36*p5-5*5*p5;
while(r&&p1) {p1--;r--;}
}
if(p4)
{
r=36*p4-4*4*p4;
while(p2&&r){p2--,r=r-2*2;}
while(r&&p1){r--;p1--;}
}
if(p3)
{
if(p3%4!=0) sum++;
if(p3%4==1)
{
r=36-3*3*1;
for(a=1;a<=5&&p2;a++)
{
r=r-2*2;
p2--;
}
while(r&&p1){r--;p1--;}
}
if(p3%4==2)
{
r=36-3*3*2;
for(a=1;a<=3&&p2;a++)
{
r=r-2*2;
p2--;
}
while(r&&p1){r--;p1--;}
}
if(p3%4==3)
{
r=36-3*3*3;
if(p2){p2--;r=r-2*2;}
while(r&&p1){r--;p1--;}
}
}
if(p2)
{
sum=sum+p2/9;
if(p2%9)
{
r=36-4*(p2%9);
while(p1&&r){r--;p1--;}
sum++;
}
}
if(p1)
{
sum=sum+p1/36;
if(p1%36) sum++;
}
printf("%d\n",sum);
}
return 0;
}