JSOI2007 乳酪 題解 貪心 O 1

2021-06-29 01:57:50 字數 1941 閱讀 2304

pid227 / [jsoi2007]乳酪☆

檢視最後一次評測記錄

題目評價

質量

4

★★★★★

★★★★☆

★★★☆☆

★★☆☆☆

★☆☆☆☆

0%16.6%

16.6%

16.6%

50%

通過統計

最短耗時

0ms

最小記憶體

0kb

題目標籤

型別

貪心模擬

**jsoi2007

題目描述

乳酪和pizza一樣,是一小塊扇形的固體。在乳酪從工廠裡生產出來的時候,一共有4種形狀,編號為1~4,分別是圓心角為72º;;,144º;;,216º;;,288º;;的扇形。乳酪的盒子是圓形的,半徑和乳酪的半徑一致。也就是說,一塊1號乳酪和一塊4號乳酪可以恰好裝入乙個盒子,一塊2號乳酪和一塊3號乳酪可以恰好裝入乙個盒子。

你的任務是寫乙個程式,計算給定的乳酪最多可以裝滿幾個盒子。

輸入格式

一行,四個數字,表示1~4號乳酪的數量,都在0~100之內

輸出格式

乙個數字,表示可以裝滿幾個盒子

樣例輸入

樣例輸出

題解:我們先將題目稍變一下:有a,b,c,d個體積為1,2,3,4的物體,問能裝滿多少個體積為5的箱子

然後我們不難列出所有能湊的式子:

5*1   3*1+1*2  1*1+2*2  2*1+1*3  1*2+1*3  1*1+1*4 (乘號前為數量,乘號後為體積)

我們發現1個箱子中最多只能裝下1個4,那我們不妨先將4裝入d個箱子中

我們又發現1個箱子中最多只能裝下1個3,,並且不能和4放在一塊,那不妨再將3放入c個箱子中

現在4和3的價值已經被榨乾了,不管它們了(貪心)

然後我們考慮已經裝了4的箱子是否要裝個1將之填滿呢?

答案是肯定的,因為「對於1而言」已經沒有更划算的買賣了(貪心):只要消耗1個1,而且不用消耗2,就能得到1個滿箱子

我們再考慮已經裝了1個3的箱子,有2個問題?是裝它還是裝空箱子?如果裝的話,裝2個1還是裝1個2?

裝空箱子猜猜就是不划算的,而且無論使用「5*1  3*1+1*2  1*1+2*2」中的哪乙個式子,都有辦法用它們中的一部分湊到3體積,

也就是說,用1、2來裝滿5體積的話,相當於先裝了3體積,再裝剩下的2體積。那我還不如直接用已經裝了3體積的那些箱子,少耗資源多好啊(貪心)。

那下乙個問題,裝2個1還是裝1個2?

當然是裝1個2了,因為1個2能做的事,2個1都能做,反之則不一定,因為我可以把2個1拆開用。既然如此,讓沒用的2上吧(貪心)。

小結一下,以上也就是先將1、4盡可能組合,2、3盡可能組合。

如果2沒有了,而那些已經裝了3的盒子還有並且還有1,就用2個1來裝。

現在那些裝了1個4或1個3的箱子已經處理完了,我們來處理手頭剩下的1和2(如果有的話)。

還是老樣子,2沒有用,讓它先上,先用2個2,1個1裝,2不夠了就用1個2,3個1裝,還不夠就用5個1裝。

現在1、2、3、4都被榨乾了,剩下的也都湊不了5了~

注意: a-=b/2; b%=2;  順序不能換呀...

**僅供參考:

#includeusing namespace std;

int main()

else

if (b>=c)

sum+=a/5;

a%=5;

} else

} else

else

sum+=a/5;

a%=5;

} cout<

JSOI2007乳酪題解

題目描述 乳酪和pizza一樣,是一小塊扇形的固體。在乳酪從工廠裡生產出來的時候,一共有4種形狀,編號為1 4,分別是圓心角為72 144 216 288 的扇形。乳酪的盒子是圓形的,半徑和乳酪的半徑一致。也就是說,一塊1號乳酪和一塊4號乳酪可以恰好裝入乙個盒子,一塊2號乳酪和一塊3號乳酪可以恰好裝...

JSOI2007 建築搶修 貪心

可以考慮 dp 但是很顯然 n 2 降不下來.然後考慮貪心,首先,絕對的正確的是,在同等的情況下,給後面的留更多的時間.首先按照 t 2 排序.然後我們維護乙個大根堆 每修理一棟建築 我們就把這棟建築的t1值加入堆 若當前無法修理 我們判斷堆頂是否比這棟建築的t1大 如果大 取消修理堆頂,改為修理當...

題解 JSOI2007 建築搶修

貪心加優先佇列 先對每個建築物的t值從小到大進行排序 當某個建築物無法按時完成時 在已經選擇的建築物裡選擇比這個建築物用時長的替換下來,並且放棄這個建築物 1 include2 include3 include4 include5 using namespace std 6int n,ans,now...