POJ 4117 簡單的整數劃分問題

2021-08-14 03:28:10 字數 1112 閱讀 5984

總時間限制: 100ms 記憶體限制: 65536kb

描述 將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。

正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。

輸入 標準的輸入包含若干組測試資料。每組測試資料是乙個整數n(0 < n <= 50)。

輸出 對於每組測試資料,輸出n的劃分數。

樣例輸入

5 樣例輸出

7 提示

5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1令f

[i][

j]表示整數

i 的

j劃分,其中

j 表示劃分中的最大數字。 則f

[i][

j]=⎧

⎩⎨⎪⎪

⎪⎪⎪⎪

1,i==

1orj

==1,f

[i][

j−1]

+1,i

==jf[

i−j]

[j]+

f[i]

[j−1

],i>jf

[i][

i],i

<

j

while

true:

try:

n = int(input().strip())

dp = [[0

for i in range(n + 1)] for _ in range(n + 1)]

for i in range(1, n + 1):

for j in range(1, n + 1):

if i == 1

or j == 1: dp[i][j] = 1

elif i == j: dp[i][j] = dp[i][j - 1] + 1

elif i < j: dp[i][j] = dp[i][i]

else: dp[i][j] = dp[i - j][j] + dp[i][j - 1]

print(dp[n][n])

except:

break

dp演算法 poj 4117 簡單的整數劃分問題

總時間限制 100ms 記憶體限制 65536kb 描述將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n ...

4117 簡單的整數劃分問題

總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入 標準的輸入包含若干組測試資料。每組測試資料是乙個整數...

4117 簡單的整數劃分問題(動態規劃)

總時間限制 100ms 記憶體限制 65536kb 描述將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n ...