[JSOI2007]奶酪
题目描述
奶酪和pizza一样,是一小块扇形的固体。在奶酪从工厂里生产出来的时候,一共有4种形状,编号为1~4,分别是圆心角为72º;;,144º;;,216º;;,288º;;的扇形。奶酪的盒子是圆形的,半径和奶酪的半径一致。也就是说,一块1号奶酪和一块4号奶酪可以恰好装入一个盒子,一块2号奶酪和一块3号奶酪可以恰好装入一个盒子。
你的任务是写一个程序,计算给定的奶酪最多可以装满几个盒子。
输入格式
一行,四个数字,表示1~4号奶酪的数量,都在0~100之内
输出格式
一个数字,表示可以装满几个盒子
题解:———————————————————————————————————————————————————
贪心顺序:
72+288
144+216
72+2*144
2*72+216
3*72+144
或
72+288
144+216
2*72+216
72+2*144
3*72+144
通过数学方法可证明,相加的数的个数是递增的才能保证最优
代码实现:
#include<iostream>
using namespace std;
int main()
{
int a[6],i,j;
cin>>a[1]>>a[2]>>a[3]>>a[4];
a[5]=0;
j=min(a[4],a[1]);
a[5]=a[5]+j;
a[4]=a[4]-j;
a[1]=a[1]-j;
j=min(a[2],a[3]);
a[5]=a[5]+j;
a[2]=a[2]-j;
a[3]=a[3]-j;
j=min(a[1]/2,a[3]);
a[5]=a[5]+j;
a[1]=a[1]-2*j;
a[3]=a[3]-j;
j=min(a[1],a[2]/2);
a[5]=a[5]+j;
a[1]=a[1]-j;
a[2]=a[2]-2*j;
j=min(a[1]/3,a[2]);
a[5]=a[5]+j;
a[1]=a[1]-3*j;
a[2]=a[2]-j;
a[5]=a[5]+a[1]/5;
a[1]=a[1]%5;
if(a[1]>0) a[5]+=1;
cout<<a[5];
system("pause");
}