Run Time: 0.000
Ranking (as of 2016-01-12): 54 out of 401
Language: C++
An easy dynamic programming problem.
/* UVa 12034 - Race To build using Visual Studio 2012: cl -EHsc -O2 UVa_12034_Race.cpp */ #include <cstdio> const int n_max = 1000, modulo = 10056; int combinations[n_max + 1][n_max + 1]; int nr_ways[n_max + 1]; // nr_ways[i] is the number of way the race can finish with i horses int main() { // calculate the combinations for (int i = 0; i <= n_max; i++) combinations[i][0] = 1; for (int i = 0; i <= n_max; i++) combinations[i][i] = 1; for (int i = 1; i <= n_max; i++) for (int j = 1; j < i; j++) combinations[i][j] = (combinations[i - 1][j - 1] + combinations[i - 1][j]) % modulo; nr_ways[1] = 1; for (int i = 2; i <= n_max; i++) { int nr = 1; for (int j = 1; j < i; j++) { nr += combinations[i][j] * nr_ways[i - j] % modulo; nr %= modulo; } nr_ways[i] = nr; } int T; scanf("%d", &T); for (int t = 1; t <= T; t++) { int n; scanf("%d", &n); printf("Case %d: %d\n", t, nr_ways[n]); } return 0; }
No comments:
Post a Comment