题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1142
input | output |
---|---|
2 3 -1 |
3 13 |
求方案数?
PS:
dp[i][j]:表示将i个数分成j个有序集合的方案数所以:dp[i][j]=dp[i-1][j-1]*j + dp[i-1][j]*j
代码如下:
#include <cstdio> #include <cstring> int dp[147][147]; int ans[47]; //dp[i][j] = dp[i-1][j]*j + dp[i-1][j-1]*j; void init() { memset(ans, 0,sizeof(ans)); dp[1][0] = 0; dp[1][1] = 1; for(int i = 2; i <= 10; i++) { for(int j = 1; j <= i; j++) { dp[i][j] = dp[i-1][j]*j + dp[i-1][j-1]*j; ans[i] += dp[i][j]; } } } int main() { int n; while(~scanf("%d",&n)) { if(n == -1) break; init(); printf("%d\n",ans[n]); } return 0; } /* 2 3 4 5 6 7 8 9 10 */
原文地址:http://blog.csdn.net/u012860063/article/details/43645983