首页 > 代码库 > UVA - 12034 Race
UVA - 12034 Race
Description
Tamim and Lina, two of the biggest mega minds of Bangladesh went to a far country. They ate, coded and wandered around, even in their holidays. They passed several months in this way. But everything has an end. A holy person,e-Moti-ji came into their life. e-Moti-ji took them to derby (horse racing).e-Moti-ji enjoyed the race, but as usual Tamim and Lina did their as usual task instead of passing some romantic moments. They were thinking- in how many ways a race can finish! Who knows, maybe this is their romance!
In a race there are n horses. You have to output the number of ways the race can finish. Note that, more than one horse may get the same position. For example, 2 horses can finish in 3 ways.
- Both first
- horse1 first and horse2 second
- horse2 first and horse1 second
Input
Input starts with an integer T (1000), denoting the number of test cases. Each case starts with a line containing an integer n (1n1000).
Output
For each case, print the case number and the number of ways the race can finish. The result can be very large, print the result modulo 10056.
Sample Input
3 1 2 3
Sample Output
Case 1: 1 Case 2: 3 Case 3: 13题意:求n匹马可能的排列情况(可以并列)
思路:设dp[i][j]表示i匹马j个排名的情况,那么我们可以发现在dp[i-1][j]和dp[i-1][j-1]都可以在有j个插入可能
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1005; const int mod = 10056; int n, dp[maxn][maxn]; int ans[maxn]; void init() { dp[0][0] = 1; for (int i = 1; i < maxn; i++) { int sum = 0; for (int j = 1; j <= i; j++) { dp[i][j] = (dp[i-1][j-1] + dp[i-1][j]) * j % mod; sum = (sum + dp[i][j]) % mod; } ans[i] = sum; } } int main() { int t, cas = 1; init(); scanf("%d", &t); while (t--) { scanf("%d", &n); printf("Case %d: %d\n", cas++, ans[n]); } return 0; }