HDU -2512-一卡通大冒险

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=2512

题目涉及到了用第二类斯特灵数;

何谓用第二类斯特灵数:

S(P,K)=S(P-1,K-1)+K*S(P-1,K);表示P个元素放入K个不可区分的集合中而且集合不为空的划分个数。

那么问题的解为sigma(S(P,i))  (P=>i>=1) 这个和称为bell数。

Bell数是将P个元素集合分到非空且不可区分例子的划分个数。详见组合数学

 

题目大意可为 : 将N张卡分成若干个集合,集合不为空,有多少种分法。

我的AC代码

#include<stdio.h>

__int64 a[2005][2005];

int main(void)
{
int i,j;
for(i=1; i<=2000; i++)
{
for(j=1; j<=i; j++)
{
if(i==j)
a[i][j]=1;
else if(j==1)
a[i][j]=1;
else
a[i][j]=(a[i-1][j-1]%1000+j*a[i-1][j]%1000)%1000;
}
}
__int64 n,s;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%I64d",&n);
s=0;
for(i=1; i<=n; i++)
s=(s+a[n][i])%1000;
printf("%I64d\n",s);
}
return 0;
}

posted @ 2014-09-10 11:26  立刻行动  阅读(147)  评论(0编辑  收藏  举报