hdu 5230 整數劃分,dp

2021-07-14 21:10:07 字數 901 閱讀 3654

解題思路:

這是乙個整數劃分的模型:

將n劃分為k

個整數的劃分數

設dp[i][j]

為將i劃分為j

個整數的劃分數。

(1) i為不可能出現的情況,dp[i][j]=0

;(2) 若i=j

,有一種情況:i

可以劃分為i

個1之和,dp[i][j]=1

;(3) 若i>j

,可以根據劃分數中是否含有1

分為兩類:若劃分數中含有1

,可以使用「截邊法」將j

個劃分分別截去乙個1

,把問題轉化為i-j

的j-1

個劃分數,為dp[i-j][j-1]

; 若劃分中不包含1

,使用「截邊法」將j

個劃分數的最下面乙個數截去,將為題轉化為求i-j

的j個劃分數,為dp[i-j][j]

。所以i>j

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

。這道題是一樣的,dp[i][j]表示將i劃分成j個不同的數,與上面不同的是,這裡當i=j時我們是不處理的,即我們不能出現i=j的情況。

#include#include#includeusing namespace std;

const int maxn = 100005;

const int mod = 998244353;

int n,l,r,c,dp[2][maxn];

int main()

memset(dp[(i - 1) & 1],0,sizeof(dp[(i - 1) & 1]));

} printf("%d\n",ans);

} return 0;

}

整數劃分(劃分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 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...

整數劃分 劃分數(DP動態規劃)

給你乙個正整數n,讓你計算出n的m劃分有幾種方法。思路 定義dp i j 為i的j劃分,即將i劃分為j個數字之和的方案數。1 當j i時,此時,劃分個數不超過i,此時是正常的劃分。劃分的結果一定只有兩種型別 一種是j個數字,都大於0。另一種是有0,即不夠劃分j個,用0來湊的。j個數字中存在0的,其實...