ZOJ-1163

来源:互联网 发布:知乎 phyton 编辑:程序博客网 时间:2024/05/21 06:48

不算太难的DP,开始我直接用暴搜做的。。果断TLE了。。结果挺大的,要用long long存,DP的话,用dp[i][j]表示总和为i,最高木块<=j的方案总数,然后dp[i][j+1]状态转移就是dp[i][j]加上最高木块高度刚好为j+1的方案总数

#include<stdio.h>#include<string.h>int main(){long long dp[501][501];memset(dp, 0, sizeof(dp));int i, j;for (i = 1; i <= 500; i++)dp[1][i] = 1LL;for (i = 2; i <= 500; i++)dp[2][i] = 1LL;for (i = 3; i <= 500; i++){for (j = 2; j <= i - 1; j++)dp[i][j] = dp[i][j - 1] + dp[i - j][j - 1];dp[i][j] += 1;for (; j <= 500; j++)dp[i][j] += dp[i][j - 1];}while (scanf("%d", &i), i)printf("%lld\n", dp[i][500] - 1);return 0;}


0 0
原创粉丝点击