題目描述
乳酪和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
usingnamespace std;
intdata[5];
inttotal=0;
intx1=0;
intx2=0;
intx3=0;
intx4=0;
intx5=0;
intx6=0;
intmin(int a,int b)
if(areturn 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 pid227 jsoi2007 乳酪 檢視最後一次評測記錄 題目評價 質量 4 0 16.6 16.6 16.6 50 通過統計 最短耗時 0ms 最小記憶體 0kb 題目標籤 型別 貪心模擬 jsoi2007 題目描述 乳酪和pizza一樣,是一小塊扇形的固體。在乳酪從工廠裡生產出來的時候,一共有... 貪心加優先佇列 先對每個建築物的t值從小到大進行排序 當某個建築物無法按時完成時 在已經選擇的建築物裡選擇比這個建築物用時長的替換下來,並且放棄這個建築物 1 include2 include3 include4 include5 using namespace std 6int n,ans,now... 提交傳送門 這個就是乙個貪心唄,用set維護大到小的數列 然後如果能搶修乙個建築的話就ans 不能的話,看看比不比上一次搶修的優秀,優秀的話就選它,然後更換 description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部...JSOI2007 乳酪 題解 貪心 O 1
題解 JSOI2007 建築搶修
JSOI2007 建築搶修