UVA 12034 - Race(简单DP)
题目链接 https://cn.vjudge.net/problem/UVA-12034
【题意】
A,B两个人赛马,最终的名次有3种可能:并列第一,A第一B第二,B第一A第二. 输入n(1<=n<=1000)求n个人赛马时最终名次的个数,对10056取模
【思路】
设答案为,假设并列第一名有 个人,有 种可能性,接下来有种可能性,因此答案为
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1005;
const int mod=10056;
int c[maxn][maxn];
int dp[maxn];
void solve(){
c[0][0]=1;
for(int i=1;i<maxn;++i){
c[i][0]=1;
for(int j=1;j<=i;++j) c[i][j]=(c[i][j]+c[i-1][j]+c[i-1][j-1])%mod;
}
dp[0]=dp[1]=1;
for(int i=2;i<maxn;++i){
for(int j=1;j<=i;++j) dp[i]=(dp[i]+c[i][j]*dp[i-j])%mod;
}
}
int main(){
solve();
int T;
scanf("%d",&T);
for(int kase=1;kase<=T;++kase){
int n;
scanf("%d",&n);
printf("Case %d: %d\n",kase,dp[n]);
}
return 0;
}