Python 數的劃分 動態規劃

2021-09-12 18:04:53 字數 1138 閱讀 1366

題目:

將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。

例如:n=7,k=3,下面三種分法被認為是相同的。

1,1,5; 1,5,1; 5,1,1;

問有多少種不同的分法。

輸入:n,k ( 6 < n ≤ 200,2 ≤ k ≤ 6 )

輸出:乙個整數,即不同的分法。

輸入描述:

兩個整數 n,k ( 6 < n ≤ 200, 2 ≤ k ≤ 6 )
輸出描述:

1個整數,即不同的分法。
示例1

輸入

7 3輸出

4

題目解答:

使用動態規劃求解。將劃分後的數分成包含1和不包含1的兩種情況。 dp[i-1][j-1]表示包含1的情況;dp[i-j][j]表示不包含1的情況,兩者之和便是dp[i][j],即將 i 劃分成 j 份的劃分方法。

**如下(不完全通過):

n, k = map(int,input().split())

dp = [[0]*205]*100

dp[0][0]=1

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

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

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

print(dp[n][k])

但是...分析有點錯誤我用牛客oj只過了20%...(求賜教...)

轉改寫遞迴版通過,通過**如下:

n, k = map(int,input().split())

def divide(n,m):

if m<=1 or n <= 1:

return 1

if n < m:

return divide(n,n)

return divide(n,m-1)+divide(n-m,m)

print(divide(n-k,k))

動態規劃深度搜尋數的劃分

乙個正整數可以劃分為多個正整數的和,比如n 6時 6 1 5 2 4 3 3 2 2 2 1 1 4 1 2 3 1 1 1 3 1 1 2 2 1 1 1 1 2 1 1 1 1 1 1 共有十一種劃分方法。給出乙個正整數,問有多少種劃分方法。乙個正整數n 乙個正整數,表示劃分方案數 n 100 ...

數的劃分 codevs 黃金題 動態規劃

思路 在本題中我嘗試了一下用遞迴寫的dp,記憶化建立了一張表。dp x y z 中,x代表需要分配的數,y以後代表分數時不能超過y,z代表還剩下幾次分配機會。dp方程為 dp x y z 求和 k從y至1 需要注意 k是從y開始的,需要把x k 0的情況continue掉。需要注意 分配不完 和 分...

動態規劃 分硬幣

解題心得 1 主要是找到狀態和狀態轉移方程,將大的問題縮小,一步步擴大得到最後的最優解。2 和最長上公升子串行相比,此問題不過是單位長度1變成了硬幣的分值,所以將大於或小於改為value的幾個值 3 可以想推出前面幾項來得出最後的狀態轉移公式。上面是在網上看到的一篇好文章,裡面有乙個湊硬幣的問題 如...