整數劃分問題 DP

2021-07-03 03:17:14 字數 939 閱讀 6522

整數劃分的定義:

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劃分為不小於...