SXF2019長方體的擺放

2021-09-26 04:10:01 字數 1540 閱讀 4547

乙個長方體,長寬高分別為x,y,z,都為自然數。

現在要把若干個相同的長方體擺成高為n的一根柱形體。

每層擺1個,如果兩種擺法的高度是一樣的,則認為這兩種擺法等價,所以每層只有三種擺法。

求一共有多少種擺法。

輸入描述:

第一行為乙個數字n,n>=1且n<=100,表示要擺放的高度

第二行為長方體的長寬高,x、y、z都為無符號整數,按公升序排列。

輸出描述:

擺法總數,已知該總數會小於10000000

輸入例子1:

105 6 7

輸出例子1:

1

用dp[i]表示使用i個長方體達到高度j擺放的總數, 那麼dp[i][j]可以由三個部分組成

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...