五种物品,体积,重量,数量,价值分别如下:
物品编号 体积 重量 数量 价值
1 30 3 10 4
2 50 8 10 5
3 10 2 10 2
4 23 5 8 3
5 130 20 5 11
限制体积最多500,重量最多100。问能带上物品最大总价值是多少??
#include<iostream.h>
#include<string.h>

int f[6][501][101];
int state[6][501][101];

void main()

...{

int v[6] = ...{0,30,50,10,23,130};

int w[6] = ...{0,3,8,2,5,20};

int c[6] = ...{0,10,10,10,8,5};

int t[6] = ...{0,4,5,2,3,11};

const int maxv = 500;
const int maxw = 100;
const int maxn = 5;
int i ;
int n,x,y;

memset(f,0,sizeof(f));
memset(state,0,sizeof(state));

for(n = 1 ; n <=maxn ; ++n)
for(x =1 ; x <= maxv ; ++x)
for( y = 1 ; y <= maxw ; ++y)

...{
//计算最大i
int maxi = c[n];
if(x / v[n] < maxi)
maxi = x/v[n];
if(y / w[n] < maxi)
maxi = y / w[n];

for(i = 0; i <=maxi ;++i)

...{
if(f[n-1][x- i * v[n]][y - i * w[n]] + i*t[n] > f[n][x][y])

...{
f[n][x][y] = f[n-1][x- i * v[n]][y - i * w[n]] + i*t[n];
state[n][x][y] = i;
}
}
}

int ans= 0 ;
int xx, yy;
for( x =0 ; x < maxv; ++x)
for( y = 0 ; y < maxw ; ++y)

...{
if(f[maxn][x][y] > ans)

...{
ans = f[maxn][x][y];
xx= x;
yy = y;
}
}
cout<<ans<<endl<<endl;

for(i = maxn ; i >=1 ; --i)

...{
int tmp = state[i][xx][yy];
cout<<tmp<<endl;
xx = xx - tmp * v[i];
yy = yy - tmp * w[i];
}
}