這題的思路很明了,無非是更多地利用空間,盡可能少地空出空位。
不妨設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 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方...