整數劃分的定義:
n=m1+m2+…+mi; (其中mi為正整數,並且1 <= mi <= n),則為n的乙個劃分。
如果中的最大值不超過m,即max(m1,m2,…,mi)<=m,則稱它屬於n的乙個m劃分。這裡我們記n的m劃分的個數為f(n,m);
舉個例子,當n=5時我們可以獲得以下這幾種劃分(注意,例子中m>=5)
5 = 5
= 4 + 1
= 3 + 2
= 3 + 1 + 1
= 2 + 2 + 1
= 2 + 1 + 1 + 1
= 1 + 1 + 1 + 1 + 1
動規演算法的解法:
根據n和m的關係,考慮以下幾種情況:
1. 當n=1時,不論m的值為多少(m>0),只有一種劃分即;
2. 當m=1時,不論n的值為多少,只有一種劃分即n個1,;
3. 當n=m時,根據劃分中是否包含n,可以分為兩種情況:
(1) 劃分中包含n的情況,只有乙個即;
(2) 劃分中不包含n的情況,這時劃分中最大的數字也一定比n小,即n的所有(n-1)劃分。因此 f(n,n) =1 + f(n,n-1);
4. 當n
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int n, m;
int dp[100][100];
int main()
}return
0;}
整數劃分問題 經典DP
相關題目1 相關題目2 相關題目3 下面的描述大部分借鑑於 感謝,但是其中有部分錯誤,我會在下面的描述中糾正過來 總的解決方法時截邊法,也就是去討論有1無1的情況和截去他們的情況 記住了.1.若劃分的多個整數可以相同 設dp i j 為將i劃分為不大於j的劃分數 1 當i j 時,i不能劃分為大於i...
整數劃分(劃分dp)總結
寫了幾個題發現整數劃分是一類題,而不是一道題。具體題型 1 n相同元素放入m個相同的盤子 盤子允許為空 例題 放蘋果 poj 1664設dp i j 為 j 個元素放入i個盤子轉移方程 dp i j dp i 1 j 新新增乙個盤子,盤子為空 dp i j dp i j i i個盤子 各取出乙個 2...
整數劃分問題 dp 動態規劃
原文 假設我們有乙個整數n,我們要對它在約束條件不同的情況下進行劃分。1.把n劃分成不小於m 且為正整數 的劃分數 2.把n劃分成為k個正整數的劃分數 3.把n劃分成k個奇數的劃分數 1.把n劃分成不小於m 且為正整數 的劃分數 狀態dp i j 代表把i劃分為不小於j的劃分數。1.把n劃分為不小於...