105e Knapsack Problem
user_3763047219
c_cpp
3 years ago
1.1 kB
11
Indexable
#include <iostream>
int main()
{
int n = 0;
int v[101] = {}, w[101] = {};
int W = 0;
static int c[101][1001] = {};
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
}
for (int i = 1; i <= n; i++) {
scanf("%d", &w[i]);
}
scanf("%d", &W);
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= W - w[1]; j++) {
c[i][j] = v[1];
}
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= W - w[1]; j++) {
if (w[i] > j) {
c[i][j] = c[i - 1][j];
}
else {
if (c[i - 1][j] < c[i - 1][j - w[i]] + v[i]) {
c[i][j] = c[i - 1][j - w[i]] + v[i];
}
else {
c[i][j] = c[i - 1][j];
}
}
}
}
int pw = W - w[1];
int ans[101] = {};
int value = v[1];
int total = 0;
for (int i = n; i >= 2; i--) {
if (c[i][pw] != c[i - 1][pw]) {
total = total + 1;
ans[total] = i ;
value = value + v[i];
pw = pw - w[i];
}
}
printf("%d\n%d\n", value , total+1);
printf("(1");
for (int i = total; i >= 1; i--) {
printf(",%d", ans[i]);
}
printf(")");
}Editor is loading...