二维背包问题是指对于每件物品,有两种不同的费用;选择这种物品必须付出这两种代价;对于每种代价都有一个可付出的最大值,问如何选择物品可以得到最大的价值。
举个实例来看:
假设 y为背包中物品价值,a和b分别代表背包中两种物品的重量,2a+b<=8代表物品的重量分别为2和1,但是总重量不能超过8,而5a+2b<=15表示物品的体积分别为5和2,但是总体积不能超过15,两种物品的价值分别为8和7,则8a+7b=y,求y的最大值可以取到多少
代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef struct
{
int w1;
int c1;
int v1;
}goods;
int main()
{
int d[50][50],i,j,k,w,c;
goods a[3];
cout<<"请分别输入最大重量和最大体积:"<<endl;
cin>>w>>c;
cout<<"请分别输入货物的重量,体积和价值:"<<endl;
for(i=1;i<3;i++)
{
cin>>a[i].w1>>a[i].c1>>a[i].v1;
}
for(int i=0;i<50;i++)
{
for(int j=0;j<50;j++)
d[i][j]=0;
}
for(i=1;i<=2;i++)
{
for(j=a[i].w1;j<=w;j++)
for(k=a[i].c1;k<=c;k++)
{
if(d[j][k]<d[j-a[i].w1][k-a[i].c1]+a[i].v1)
d[j][k]=d[j-a[i].w1][k-a[i].c1]+a[i].v1;
}
}
cout<<"x0的最大值为: "<<d[w][c]<<endl;
system("pause");
return 0;
}
浙公网安备 33010602011771号