您的位置:首页 > 其它

uva12034(递推关系)

2016-10-06 17:29 274 查看
/*
translation:
求n个人赛马最终名次的可能性个数除以10056的余数

solution:
递推
假设第一名有i人,既有c
[i]种可能,接下来有f(n-i)种
故答案sum(c
[i]*f[n-i])%10056

note:
1:求组合数c
[m]的递推方法
2:求类似递推的题目时候,考虑分类一般是以考虑“最左”为根据来分类

date:	2016.10.6
*/
#include <iostream>
#include <cstdio>

using namespace std;
const int maxn = 1005;
const int M = 10056;

typedef long long ll;

ll f[maxn], c[maxn][maxn];
int n;

void C() {
for(int i = 0; i <= 1000; i++) {
c[i][i] = c[i][0] = 1;
for(int j = 1; j < i; j++) {
c[i][j] = (c[i-1][j] + c[i-1][j-1]) % M;
}
}
}

void printTable() {
f[0] = f[1] = 1;	f[2] = 3;

C();
for(int i = 3; i <= 1000; i++) {
ll res = 0;
for(int j = 1; j <= i; j++) res = (res + c[i][j]*f[i-j]) % M;
f[i] = res;
}
}

int main()
{
printTable();

int T, kase = 0;	cin >> T;
while(T--) {
cin >> n;
printf("Case %d: %lld\n", ++kase, f
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: