題目描述
奶酪和pizza一樣,是一小塊扇形的固體。在奶酪從工廠裏生產出來的時候,一共有4種形狀,編號爲1~4,分別是圓心角爲72º;;,144º;;,216º;;,288º;;的扇形。奶酪的盒子是圓形的,半徑和奶酪的半徑一致。也就是說,一塊1號奶酪和一塊4號奶酪可以恰好裝入一個盒子,一塊2號奶酪和一塊3號奶酪可以恰好裝入一個盒子。
你的任務是寫一個程序,計算給定的奶酪最多可以裝滿幾個盒子。
輸入格式
一行,四個數字,表示1~4號奶酪的數量,都在0~100之內
輸出格式
一個數字,表示可以裝滿幾個盒子
樣例輸入
2 1 1 1
樣例輸出
2
解題思路:
利用給定的1~4號的奶酪數量,拼成最多的整個奶酪。這道題不仔細看題目的話會認爲只有兩種拼接方式,我就在這裏錯了很多次。這道題一共有六種拼接方式。那麼爲了使能拼成的整個奶酪儘可能多,就要有一定的拼接順序。這題使用貪心算法就可以。貪心策略是優先使用最少的數目組合去去拼接整塊奶酪。然後完成一種拼接判斷是否能使用下一種方式。
拼接方法和使用的數目如下(按優先級排列):
(1)72×1和288×1 總數爲2
(2)144×1和216×1 總數爲2
(3)72×2和216×1 總數爲3
(4)72×1和144×2 總數爲3
(5)72×3和144×1 總數爲4
(6)72×5 總數爲5
AC代碼:
#include<iostream>
usingnamespace std;
intdata[5];
inttotal=0;
intx1=0;
intx2=0;
intx3=0;
intx4=0;
intx5=0;
intx6=0;
intMin(int a,int b)
{
if(a<b)
return a;
return b;
}
intmain()
{
for(int i=1;i<5;++i)
cin>>data[i];
x1=Min(data[1],data[4]); //1和4
x2=Min(data[2],data[3]); //2和3
int margin[5];
margin[1]=data[1]-x1;
margin[4]=data[4]-x1;
margin[2]=data[2]-x2;
margin[3]=data[3]-x2;
if(margin[1]>=2&&margin[3]>=1)
{
x3=Min(margin[1]/2,margin[3]);//1和3組合 1:72*2 3:216 3
margin[1]-=x3*2; //更新
margin[3]-=x3;
}
if(margin[1]>=1&&margin[2]>=2)
{
x4=Min(margin[1],margin[2]/2); //1和2組合 1:72 2:2*144 3
margin[1]-=x4; //更新
margin[2]-=x4*2;
}
if(margin[1]>=3&&margin[2]>=1)
{
x5=Min(margin[1]/3,margin[2]); //1和2組合 1:72*3 2: 1*144 4
margin[1]-=x5*3; //更新
margin[2]-=x5;
}
if(margin[1]>=5)
x6=margin[1]/5; //只用1(5個1) 5
cout<<x1+x2+x3+x4+x5+x6<<endl;
return 0;
}