解析:一支队伍分组的情况,如果这支队伍有n个人,就有n种情况分别是一个组,两个组,。。。。。。;
i个人分成j组有两种方式:
1、i-1个人分成j-1组之后,第i个人独立分成一组;DP[i][j]=DP[i-1][j-1]。
2、i-1个人分成j组,第i个人随便加入j组中的任何一组;DP[i][j]=DP[i-1][j]*j。
3、因此状态转移方程为DP[i][j]=DP[i-1][j-1]+DP[i-1][j]*j。
#include<iostream> using namespace std; int main() { __int64 a[26][26],res; int c,i,j,T; memset(a,0,sizeof(a)); a[1][1]=1; for(i=2;i<=25;i++) for(j=1;j<=25;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]*j; cin>>T; while(T--) { cin>>c; for(i=1,res=0;i<=c;i++) res+=a[c][i]; printf("%I64d\n",res); } return 0; }
HDU ACM 1292 "下沙野骆驼"ACM夏令营->DP
原文地址:http://blog.csdn.net/a809146548/article/details/44305437