2011-12-31 20:47:45
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2512
题意:中文。。。
mark:递推。dp[i][j]表示i张卡片分在j本书的种类数,有dp[i][j] = dp[i-1][j-1] + dp[i-1][j]*j。
代码:
# include <stdio.h>
# define MOD 1000
int dp[2010][2010] ;
int ans[2010] = {0, 1} ;
int main ()
{
int T, n ;
int i, j ;
dp[1][1] = 1 ;
for (i = 2 ; i<=2000 ; i++)
{
ans[i] = dp[i][1] = 1 ;
for (j = 2 ; j <= i ; j++)
{
dp[i][j] = (dp[i-1][j]*j + dp[i-1][j-1]) % MOD ;
ans[i] = (ans[i] + dp[i][j]) % MOD ;
}
}
scanf ("%d", &T) ;
while (T--)
{
scanf ("%d", &n) ;
printf ("%d\n", ans[n]) ;
}
return 0 ;
}