#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Nature
{
int v;
int w;
int s;
};
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int N, V;
scanf_s("%d %d", &N,&V);
Nature a[1000];
for (int i = 0; i < N; i++)
scanf_s("%d %d %d", &a[i].v, &a[i].w, &a[i].s);
//bubblesort(a, N);
int sum = 0,r=0,t=0,vue=0;
int b[10000],c[10000];
b[0] = 0, c[0] = 0;
for(int i=0;i<N;i++)//将价值和体积拆分到两个数组
for (int j = 0; j < a[i].s; j++)
{
r++;
b[r] = a[i].v;
c[r] = a[i].w;
}
int f[100][1000] = { 0 };//f[i][j]表示可选择前i种物品容量为j的最大价值
memset(f, 0, sizeof(f));
for(int i=1;i<=r;i++)
for (int j = 1; j <= V; j++)
{
if (b[i] > j)
f[i][j] = f[i - 1][j];
else
f[i][j] = max(f[i - 1][j], f[i - 1][j - b[i]] + c[i]);
}
printf("%d", f[N][V]);
}
12-13
6365

05-19
159
