五种物品,体积,重量,数量,价值分别如下:
物品编号 体积 重量 数量 价值
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
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
f[
6
][
501
][
101
];
int
state[
6
][
501
][
101
];
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
int v[6] = ...{0,30,50,10,23,130};
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
int w[6] = ...{0,3,8,2,5,20};
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
int c[6] = ...{0,10,10,10,8,5};
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
int t[6] = ...{0,4,5,2,3,11};
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
const int maxv = 500;
const int maxw = 100;
const int maxn = 5;
int i ;
int n,x,y;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
memset(f,0,sizeof(f));
memset(state,0,sizeof(state));
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
for(n = 1 ; n <=maxn ; ++n)
for(x =1 ; x <= maxv ; ++x)
for( y = 1 ; y <= maxw ; ++y)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//计算最大i
int maxi = c[n];
if(x / v[n] < maxi)
maxi = x/v[n];
if(y / w[n] < maxi)
maxi = y / w[n];
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
for(i = 0; i <=maxi ;++i)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(f[n-1][x- i * v[n]][y - i * w[n]] + i*t[n] > f[n][x][y])
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
f[n][x][y] = f[n-1][x- i * v[n]][y - i * w[n]] + i*t[n];
state[n][x][y] = i;
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
int ans= 0 ;
int xx, yy;
for( x =0 ; x < maxv; ++x)
for( y = 0 ; y < maxw ; ++y)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(f[maxn][x][y] > ans)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
ans = f[maxn][x][y];
xx= x;
yy = y;
}
}
cout<<ans<<endl<<endl;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
for(i = maxn ; i >=1 ; --i)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
int tmp = state[i][xx][yy];
cout<<tmp<<endl;
xx = xx - tmp * v[i];
yy = yy - tmp * w[i];
}
}