题目链接: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