南陽理工acm 176 整數劃分(二)

2021-07-31 20:38:16 字數 856 閱讀 3931

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度: 3

描述 把乙個正整數m分成n個正整數的和,有多少種分法?

例:把5分成3個正正數的和,有兩種分法:

1 1 3

1 2 2

輸入

第一行是乙個整數t表示共有t組測試資料(t<=50)

每組測試資料都是兩個正整數m,n,其中(1<=n<=m<=100),分別表示要拆分的正數和拆分的正整數的個數。

輸出輸出拆分的方法的數目。

樣例輸入

2

5 25 3

樣例輸出

2

2

想法:先舉出例項,再找規律。

1.遞迴,比如將7劃分為3個正整數的和,肯定是1,1,5  1,2,4 ,1,3,3,       2,2,3;

這裡分成兩部分,一部分是包含1,即1,1,5, 1,2,4  1,3,3裡面都有1,因此可以劃分成1,5,  2,4   3,3(把1除掉) 另一

部分是不包含1,即2,2,3 ,可以將2,2,3分別減去1,即1,1,2,因此遞迴式就出來了,

digui(7,3)=digui(6,2)+digui(4,3);  

即digui(m,n)=digui(m-1,n-1)+digui(m-n,n);

考慮到若n=1,或者m=n,肯定為1,同時若m

因此**:

#include

int digui(int m,int n)

}int n;

scanf("%d",&n);

while(n--)

return 0;}

南陽理工acm 746 整數劃分(四)(動態規劃)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積 輸入 第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0...

南陽理工oj 整數劃分(DP)

問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積輸入 第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0 m n的位數 輸出 輸出每組測試樣例結果為乙個整數佔一行 樣例輸入 2 ...

NYOJ 176 整數劃分(二)

整數劃分 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述把乙個正整數m分成n個正整數的和,有多少種分法?例 把5分成3個正正數的和,有兩種分法 1 1 3 1 2 2 輸入第一行是乙個整數t表示共有t組測試資料 t 50 每組測試資料都是兩個正整數m,n,其中 1 n m...