思路:在本題中我嘗試了一下用遞迴寫的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...