數的劃分 codevs 黃金題 動態規劃

2021-08-29 01:47:40 字數 611 閱讀 6115

思路:在本題中我嘗試了一下用遞迴寫的dp,記憶化建立了一張表。

dp【x】【y】【z】中,x代表需要分配的數,y以後代表分數時不能超過y,z代表還剩下幾次分配機會。

dp方程為        dp[x][y][z]=求和(k從y至1)

(需要注意:k是從y開始的,需要把x-k<0的情況continue掉。)

需要注意 分配不完 和 分配不夠兩種情況。

當z>x 時,不夠分,dp為0。當z==x,恰好夠分,dp[x][y][z]=1;

當x>y*z時,分配不完,dp為0。相等時,dp[x][y][z]=1;

dfs時需要注意,當z==0&&x==0時,分配完成,return 1;

#includeusing namespace std;

int n,k;

int dp[201][201][7];

int dfs(int x,int y,int z)

dp[x][y][z]=res;

// cout<>n>>k;

for(int i=0;i<=n;i++)

} }

cout

}

codevs1039 數的劃分 黃金 dp

題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6輸出描述 outpu...

CodeVS 1039 數的劃分

題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description n,k 6 輸出描述 output ...

codevs 1039 數的劃分

題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。輸入描述 input description 輸入 n,k 6輸出描述 outpu...