五种物品,体积,重量,数量,价值分别如下:
物品编号 体积 重量 数量 价值
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];
}
}
#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];
}
}