乙個長方體,長寬高分別為x,y,z,都為自然數。現在要把若干個相同的長方體擺成高為n的一根柱形體。
每層擺1個,如果兩種擺法的高度是一樣的,則認為這兩種擺法等價,所以每層只有三種擺法。
求一共有多少種擺法。
輸入描述:第一行為乙個數字n,n>=1且n<=100,表示要擺放的高度
第二行為長方體的長寬高,x、y、z都為無符號整數,按公升序排列。
輸出描述:擺法總數,已知該總數會小於10000000
輸入例子1:105 6 7
輸出例子1:用dp[i]表示使用i個長方體達到高度j擺放的總數, 那麼dp[i][j]可以由三個部分組成1
dp[i]
[j]+= dp[i-1]
[j-a]
dp[i]
[j]+= dp[i-1]
[j-b]
dp[i]
[j]+= dp[i-1]
[j-c]
由這三部分相加得到,而我們最終要求的和高度有關,而和用了多少長方體無關,所以把所有高度為n的情況加起來即可;
while
true
:try
: n =
int(
input()
) a, b, c =
list
(map
(int
,input()
.split())
) max_layer =
int(n //
min(a, b, c)
) dp =[[
0]*(n +1)
for i in
range
(max_layer +1)
] dp[0]
[0]=
1for i in
range(1
,len
(dp)):
for j in
range
(len
(dp[0]
)):if j - a >=0:
dp[i]
[j]+= dp[i-1]
[j-a]
if j - b >=0:
dp[i]
[j]+= dp[i-1]
[j-b]
if j - c >=0:
dp[i]
[j]+= dp[i-1]
[j-c]
result =
0for line in dp:
result += line[n]
print
(result)
except
:break
長方體類中的建構函式
源程式 程式頭部注釋開始 程式的版權和版本宣告部分 檔名稱 建構函式編寫長方體類 作 者 114 3 張宗佳 完成日期 2012 年 3 月 21 日 版 本 號 vc.3 對任務及求解方法的描述部分 輸入描述 前4個長方柱 即陣列的前4個元素 要在定義陣列時初始化,其中前3個直接給出引數初始化,第...
hdu1069(lis的長方體堆疊模型)
translation 給出n中不同型別的石塊,每種型別的石塊長寬高都不一樣。對於兩塊石塊a,b。只有當a的底面的長寬嚴格小於b的長寬時,a才能擺放在b的上面。問最多能夠將石塊疊加到多高。solution lis的長方體堆疊模型,dp 這道題很明顯使用dp來做,其實用搜尋也可以吧,資料量不是很大 具...
c 實現長方體的面積和體積計算
c 實現長方體的面積和體積計算 一 知識體系 1 長方體的面積計算公式 s 2 a b b c c a 2 長方體的體積計算公式 v a b c 二 演算法實現 include using namespace std class cube double geta double getb double...