Codevs P2711 數的劃分 DP

2021-07-08 11:10:51 字數 1045 閱讀 8629

題目描述 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...