百練 簡單的整數劃分問題(經典dp)

2021-07-15 10:06:04 字數 1118 閱讀 7509

04:簡單的整數劃分問題

總時間限制: 100ms 記憶體限制: 65536kb

描述 將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。

正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。

輸入 標準的輸入包含若干組測試資料。每組測試資料是乙個整數n(0 < n <= 50)。

輸出 對於每組測試資料,輸出n的劃分數。

樣例輸入

5 樣例輸出

7 提示

5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1

題解:

轉移方程:num[n][m] = num[i][m - 1] + num[i - m][m]

表示n的整數劃分中每乙個數都不大於m的劃分個數。

邊界:num[i][0] = num[0][i] = 0

遞推方向:n從小到大為第一重,m從小到大為第二重

思考:

1、邊界一般會從0開始考慮

2、分類討論是很重要的

3、乙個狀態推不下去的時候一定要再加其他狀態

4、考慮dp時思路可以是看現在狀態由幾個狀態轉移過來

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 55;

int num[maxn][maxn];

int main()

for (int i = 1; i <= 50; i++)

if (m == i)

if (m < i) }}

int n;

while (scanf ("%d", &n) != eof)

return

0;}

百練 04 簡單的整數劃分問題

總時間限制 記憶體限制 100ms 65536kb 將正整數 n 表示成一系列正整數之和,n n1 n 2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數 n的劃分。正整數 n 的不同的劃分個數稱為正整 數n 的劃分數。標準的輸入包含若干組測試資料。每組測試資料是乙個整數n ...

整數劃分問題 經典DP

相關題目1 相關題目2 相關題目3 下面的描述大部分借鑑於 感謝,但是其中有部分錯誤,我會在下面的描述中糾正過來 總的解決方法時截邊法,也就是去討論有1無1的情況和截去他們的情況 記住了.1.若劃分的多個整數可以相同 設dp i j 為將i劃分為不大於j的劃分數 1 當i j 時,i不能劃分為大於i...

複雜的整數劃分問題 百練4119

將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。input 標準的輸入包含若干組測試資料。每組測試資料是一行輸入資料,包括兩個整數n 和 k。0 n 50,0 k n output 對於每組測試資料,輸出以下三行資...