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 對於每組測試資料,輸出以下三行資...