Ranking (as of 2013-08-04): 30 out of 996
Language: C++
/* UVa 10702 - Travelling Salesman To build using Visual Studio 2012: cl -EHsc -O2 UVa_10702_Travelling_Salesman.cpp */ #include <algorithm> #include <cstdio> using namespace std; const int c_max = 100, t_max = 1000; int tp[t_max + 1][c_max + 1]; // tp[k][i] is the k-th total profit of city i int p[c_max + 1][c_max + 1]; // p[i][j] is the profit when moving from i to j int main() { while (true) { int c, s, e, t; scanf("%d %d %d %d", &c, &s, &e, &t); if (!c && !s && !e && !t) break; for (int i = 1; i <= c; i++) for (int j = 1; j <= c; j++) scanf("%d", &p[i][j]); for (int i = 1; i <= c; i++) tp[1][i] = p[s][i]; for (int k = 2; k <= t; k++) for (int i = 1; i <= c; i++) { int max_p = 0; for (int j = 1; j <= c; j++) max_p = max(max_p, tp[k - 1][j] + p[j][i]); tp[k][i] = max_p; } int max_tp = 0; for (int i = 1; i <= e; i++) { int j; scanf("%d", &j); max_tp = max(max_tp, tp[t][j]); } printf("%d\n", max_tp); } return 0; }
No comments:
Post a Comment