// UVa 11856 - Ferry Loading V #include <stdio.h> #include <math.h> #include <string.h> #include <vector> using namespace std; int gen[1000001], R[1000001]; bool T[1000001]; int main() { int n; while (scanf("%d", &n) && n) { double r[100], W = 0; for (int i = 0; i < n; i++) { scanf("%lf", &r[i]); W += r[i]; } int a[100]; for (int i = 0; i < n; i++) a[i] = round(r[i] * 10000 / W); memset(T, false, sizeof(T)); T[0] = true; gen[0] = 0; int m = 1; for (int i = 0; i < n; i++) { for (int j = m - 1; j >= 0; j--) { if (!T[gen[j] + a[i]]) { T[gen[j] + a[i]] = true; R[gen[j] + a[i]] = i; gen[m++] = gen[j] + a[i]; } } } for (m = 5000; m >= 0 && !T[m]; m--) ; vector<int> sol; while (m != 0) { sol.push_back(R[m]); m -= a[R[m]]; } for (int i = sol.size() - 1; i > 0 ; i--) printf("%d ", sol[i]+1); if (sol.size() > 0) printf("%d\n", sol[0]+1); } return 0; }
Monday, May 4, 2015
UVa 11856 - Ferry Loading V
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment