// 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