題目描述 description
將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同(不考慮順序)。
例如:n=7,k=3,下面三種劃分方案被認為是相同的。
1 1 5
1 5 1
5 1 1
問有多少種不同的分法。
輸入描述 input description
n,k (6
輸出描述 output description
乙個整數,即不同的分法。
樣例輸入 sample input
7 3樣例輸出 sample output
4資料範圍及提示 data size & hint
求自然數n分成k份的方案數。
這是一道十分經典的劃分型dp題。
首先定義陣列f,用fi,j表示數字i被分為j份的方案數。
則可以推出狀態轉移方程f[i,j]=f[i-j,j]+f[i-1,j-1],具體解釋:
1、f[i-j,j]表示的是將i分為不包含1的方案的總個數,例如,4(=7-3)分成3份可以分為,則7可以分為->【共1種【注意下劃線部分
2、f[i-1,j-1]表示的是將i分為最小值為1的方案的總個數,例如,6(=7-1)分成2(=3-1)份可以分為,則7可以分為【共3種
3、所以f[7,3]=f[4,3]+f[6,2]=1+3=4
推出方程這道題也就解決了,下面**:
1view codevar a,f:array[-100..200,0..10] of
longint;
2var
i,j,n,k:longint;
3begin
4readln(n,k);
5for i:=1
to n do
6begin
7 f[i,1]:=1;8
for j:=2
to k do f[i,j]:=f[i-j,j]+f[i-1,j-1];9
end;
10writeln(f[n,k]);
11end.
codevs 1039 數的劃分
題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6輸出描述 outpu...
codevs 1039 數的劃分
codevs 1039 數的劃分 題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 問有多少種不同的分法。例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 輸入描述 input description 輸...
codevs1039 數的劃分 黃金 dp
題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6輸出描述 outpu...