題目描述 description
將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的:
1,1,5;
1,5,1;
5,1,1;
你的程式將對給定的n和k,計算有多少種不同的分法並輸出。
輸入描述 input description
輸入檔案有兩個整數n和k (6< n≤200,2≤k≤11)。
輸出描述 output description
輸出檔案只有一行,即輸出不同的分法。
樣例輸入 sample input
7 3
樣例輸出 sample output
4資料範圍及提示 data size & hint
(6< n≤200,2≤k≤11)。
思路:
dp[i,j]表示將i分成j份的方案數。
dp[i,j]:=dp[i-j,1]+dp[i-j,2]+dp[i-j,3]+…+dp[i-j,j-1]+dp[i-j,j];
時間複雜度是n*k^2。o(n*k)的方法:
由於,
dp[i,j]=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j];
dp[i-1,j-1]=dp[(i-1)-(j-1),1]+dp[(i-1)-(j-1),2]+…+dp[(i-1)-(j-1),j-1]
=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j-1];
因此,
dp[i,j]=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j-1]+dp[i-j,j]
=dp[i-1,j-1]+dp[i-j,j];
#include
using
namespace
std;
int n,k;
int dp[205][10];
int main()
}cout
<< dp[n][k];
}
A 數的劃分
a 數的劃分 將整數n 分成 k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 第一行有兩個整數 n,k 6sample input 7 3 sample output 解題思路...
wikioi 數的劃分
題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6 題解 f i,j ...
1039 數的劃分
題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6輸出描述 outpu...