#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define maxn 101
#define maxm 1001
#define maxK(a, b) (a) > (b) ? (a) : (b)
struct node {
int weight, value;
node(int w, int v) {
weight = w;
value = v;
}
};
vector<node> vt[maxn];
int n, m, w, v;
int k[maxn][maxm];
int main() {
freopen("6.knapsack.txt", "r", stdin);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d%d", &w, &v);
vt[i].push_back(node(w, v));
}
memset(k, 0, sizeof(k));
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= m; j++) {
int w = vt[i][0].weight;
if(w > j) k[i][j] = k[i-1][j];
else k[i][j] = maxK(k[i-1][j], k[i-1][j-w] + vt[i][0].value);
}
}
for(int i = 1; i <= n; i++) {
printf("(%d, %d, %d)\n", i, vt[i][0].weight, vt[i][0].value);
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
printf("%-3d", k[i][j]);
}
printf("\n");
}
printf("%-3d", k[n][m]);
return 0;
}
- 输入数据
- 运行结果