NOI 19 裝箱問題

2021-08-20 04:48:51 字數 1745 閱讀 8864

這題的思路很明了,無非是更多地利用空間,盡可能少地空出空位。 

不妨設1*1、2*2、3*3、4*4、5*5、6*6的長方體數量分別為c1、

c2、c

3、c4

、c5、

c6c1、c2、c3、c4、c5、c6

記當前答案為ans,我們知道6*6、5*5、4*4*的長方體由於體積太大,一箱只能放乙個,故ans至少是c4+

c5+c

6c4+c5+c6

。 當乙個箱子放了乙個6*6的長方體時,剛好被裝滿; 

當乙個箱子放了乙個5*5的長方體時,餘下11個1*1的格仔; 

當乙個箱子放了乙個4*4的長方體是,餘下9個2*2的格仔; 

。 當乙個箱子放了乙個3*3的長方體後,餘下5個2*2的格仔和7個1*1的格仔; 

當乙個箱子放了兩個3*3的長方體後,餘下3個2*2的格仔和6個1*1的格仔; 

當乙個箱子放了三個3*3的長方體後,餘下1個2*2的格仔和5個1*1的格仔; 

不妨設乙個陣列u=; 

設1*1的空位個數為x,2*2的空位個數為y. 

則易得 y=c

4∗9+

u[c3

%4]y=c4∗9+u[c3%4]

; 若y≥c2c2

則2*2的空位足夠2*2的長方體放下; 

否則,需要另外的箱子來裝多出來的2*2的長方體,ans要加上(c2c2

-y+8)/9. 

於是x=an

s∗36−

c6∗36

−c5∗

25−c4

∗16−c

3∗9−

c2∗4

x=ans∗36−c6∗36−c5∗25−c4∗16−c3∗9−c2∗4

若x≥c1c1

則1*1的空位足夠1*1的長方體放下; 

否則,需要另外的箱子來裝多出來的1*1的箱子,ans要加上(c1c1

-x+35)/36.

**如下

#include

int u=;

int c1,c2,c3,c4,c5,c6,x,y;

int main()

x=36

*ans-36

*c6-25

*c5-16

*c4-9

*c3-4

*c2;//這裡的ans並不是答案,而是放完2

*2的長方體後用了的箱子數

if(c1>x)

printf("%d\n",ans);

}return

0;}

百練noi 19 腫瘤檢測

總時間限制 1000ms 記憶體限制 65536kb 描述 一張ct掃瞄的灰度影象可以用乙個n n 0 n 100 的矩陣描述,矩陣上的每個點對應乙個灰度值 整數 其取值範圍是0 255。我們假設給定的影象中有且只有乙個腫瘤。在圖上監測腫瘤的方法如下 如果某個點對應的灰度值小於等於50,則這個點在腫...

百練noi 8785 裝箱問題

總時間限制 1000ms 記憶體限制 65536kb 描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入第一行是乙個整數v,表示箱子容量。第二行是乙個整數n,表示物品數。接下來n行,每行乙個正整數 不超過100...

19 裝箱問題(4 6演算法之貪心)

總時間限制 1000ms 記憶體限制 65536kb 描述 乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1,2 2,3 3,4 4,5 5,6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方...