您的位置:首页 > 其它

LightOJ1326 Race(DP)

2016-01-21 22:17 316 查看
题目问N匹马比赛有多少种结果。一开始想用排列组合搞搞,然后发现想错了。艰难地把思路转向DP,最后AC了。

dp[i][j]表示前i匹马确定出j个名次的方案数

dp[1][1]=1

对于第i匹马,它要确定出j个名次:要嘛前i-1匹确定出j个次名,然后第i匹可以成为第1...j名;要嘛前i-1匹确定出j-1个名次,然后第i匹成为独立的新的一个名次,也有第1..j名j种选择。

所以状态转移方程是:dp[i][j]=d[i-1][j]*j+d[i-1][j-1]*j

#include<cstdio>
#include<cstring>
using namespace std;
int d[1001][1001];
int main(){
d[1][1]=1;
for(int i=2; i<1001; ++i){
for(int j=1; j<=i; ++j){
d[i][j]=d[i-1][j]*j+d[i-1][j-1]*j;
d[i][j]%=10056;
}
}
int t,n;
scanf("%d",&t);
for(int cse=1; cse<=t; ++cse){
scanf("%d",&n);
int res=0;
for(int i=1; i<=n; ++i){
res+=d
[i];
res%=10056;
}
printf("Case %d: %d\n",cse,res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: