原文:
假設我們有乙個整數n,我們要對它在約束條件不同的情況下進行劃分。
1.把n劃分成不小於m(且為正整數)的劃分數
2.把n劃分成為k個正整數的劃分數
3.把n劃分成k個奇數的劃分數
1.把n劃分成不小於m(且為正整數)的劃分數
—————————————————————————————————————————————
狀態dp[i][j]代表把i劃分為不小於j的劃分數。
1.把n劃分為不小於m但可以存在相同數時的劃分數
這種情況的劃分數的方案可以分為兩類1.不包括m
2.至少包括乙個m;
第一類:dp[n][m-1],我們可以看做把n劃分為小於m的劃分數,就能保證不包括m;
第二類:dp[n-m][m], 我們可以看做把對n去掉m後的數,進行不小於m的劃分,就能保證至少包括乙個m;
dp[i][j]=dp[i][j-1]+dp[i-j][j];
2.把n劃分為不小於m,且每個人數都不相同時的劃分數
這種情況的劃分數的方案可以分為兩類1.不包括m
2.只有乙個m
第一類:dp[n][m-1],我們可以看做把n劃分為小於m的劃分數,就能保證不包括m;
第二類:dp[n-m][m-1], 我們可以看做把對n去掉m後的數,進行小於m的劃分,就能保證只包括乙個m;
dp[i][j]=dp[i][j-1]+dp[i-j][j-1];
—————————————————————————————————————————————
2.把n劃分為k個正整數的劃分數
—————————————————————————————————————————————
狀態dp[i][j] 為把i劃分為j個正整數的劃分數
1.把n劃分為k個可以相等的數的劃分數
這種情況可以分為兩類1.至少乙個1
2.乙個1也沒有(也可以看做都是》=2)
第一類:dp[n-1][k-1],我們可以先拿出乙個1分配到其中乙份,接著將剩下的n-1分配到k-1份上,就能保證
至少乙個1;
第二類:dp[n-k][k],我們可以先拿出k個1平均分配到k份(這個保證了每個都為1),接著將剩下n-k分配到
k份(保證每份中至少分配到1),就能保證k份中乙個1也沒有。(因為1加上乙個大於等於1的數
一定》=2)。
dp[i][j]=dp[i-1][j-1]+dp[i-j][j];
2.把n劃分為k個不相等的數的劃分數
這種情況可以分為兩類1.只有乙個1
2.乙個1也沒有(也可以看做都是》=2)
第一類:dp[n-k][k-1],我們可以先拿出k個1平均分配到k份(這個保證了每個都為1),接著將剩下n-k分配
到k-1份(保證除了乙份有1外,其他的都》=2),就能保證k份中除了乙份有1其它的都》=1(只有一
個1);
第二類:dp[n-k][k],我們可以先拿出k個1平均分配到k份(這個保證了每個都為1),接著將剩下n-k分配到
k份(保證每份中至少分配到1),就能保證k份中乙個1也沒有。(因為1加上乙個大於等於1的數一
定》=2)。
dp[i][j]=dp[i-j][j-1]+dp[i-j][j];
—————————————————————————————————————————————
3.把n劃分為k個奇數的劃分數
—————————————————————————————————————————————
dp[i][j]為把i劃分為j個奇數的劃分數
1.把n劃分為k個可以相同的奇數的劃分數
這種情況可以分為兩類1.至少乙個1
2.乙個1也沒有(也可以看做》=3,因為必須是奇數)
第一類:dp[n-1][k-1],我們可以先拿出乙個1分配到其中乙份,接著將剩下的n-1分配到k-1份上,就能保證
至少乙個1;
第二類:dp[n-2*k][k],我們可以先拿出k個2分配到其中的k份,接下來的n-2*k分配到k份中(這樣就保證了
每份都》=3,也就是乙個1也沒有);
dp[i][j]=dp[i-1][j-1]+dp[i-2*k][k];
2.把n劃分為k個不相同的奇數的劃分數
這種情況可以分為兩類1.只有乙個1
2.乙個1也沒有(也可以看做》=3,因為必須是奇數)
第一類:dp[i-2*k+1][k-1],dp[i-2*k+1][k-1]可以看做dp[i-2*(k-1)-1][k-1],我們可以拿出(k-1)個2平均分配
(k-1)份上,然後拿出乙個1分配到不為2的那乙份上。接下來將i-2*(k-1)-1分配到都為2的(k-1)份上
這樣就保證了這k-1份都》=3;
第二類:dp[n-2*k][k],我們可以先拿出k個2分配到其中的k份,接下來的n-2*k分配到k份中(這樣就保證了
每份都》=3,也就是乙個1也沒有);
dp[i][j]=dp[i-2*k+1][k-1]+dp[i-2*k][k];
—————————————————————————————————————————————
DP 動態規劃 整數劃分
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行是測試資料的數目m 1 m 10 以下每行均包含乙個整數n 1 n 10 輸出輸出每組測試資料有多少種分法。描述將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為...
整數劃分 劃分數(DP動態規劃)
給你乙個正整數n,讓你計算出n的m劃分有幾種方法。思路 定義dp i j 為i的j劃分,即將i劃分為j個數字之和的方案數。1 當j i時,此時,劃分個數不超過i,此時是正常的劃分。劃分的結果一定只有兩種型別 一種是j個數字,都大於0。另一種是有0,即不夠劃分j個,用0來湊的。j個數字中存在0的,其實...
整數劃分問題 動態規劃
原文出處 整數劃分 有以下情況 1 將n劃分成若干正整數之和的劃分數。2 將n劃分成k個正整數之和的劃分數。3 將n劃分成最大數不超過k的劃分數。4 將n劃分成若干奇正整數之和的劃分數。5 將n劃分成若干不同整數之和的劃分數。include includeconst int ns 55 int n,...