總時間限制: 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 ...