// UVa 10261 - Ferry Loading #include <stdio.h> #include <string.h> int main() { int t; for (scanf("%d", &t); t; t--) { int n; scanf("%d", &n); n *= 100; int T[10001], c[202]; bool R[202][10001]; memset(R, false, sizeof(R)); memset(T, 255, sizeof(T)); int oo = T[0]; T[0] = 0; int j, sum = 0; unsigned long long int i = 0; scanf("%d", &j); int s = 0, sol = 0; bool yet = true; while (j) { i++; if (yet && sum + j <= n * 2) { sum += j; c[i] = j; for (int k = n - j; k >= 0; k--) if (T[k] != oo && sum - (k + j) <= n) { T[k + j] = i; R[i][k + j] = true; s = k + j; sol = i; } } else yet = false; scanf("%d", &j); } bool left[202]; memset(left, false, sizeof(left)); for (int i = sol; i >= 0; i--) { if (R[i][s]) { left[i] = true; s -= c[i]; } } printf("%d\n", sol); for (int i = 1; i <= sol; i++) printf("%s\n", left[i] ? "port" : "starboard"); if (t > 1) printf("\n"); } return 0; }
Thursday, June 25, 2015
UVa 10261 - Ferry Loading
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment