#include "iostream"
#define CAPACITY 10
#define GOODSNUM 6
using namespace std;
int nVol[GOODSNUM];
int nValue[GOODSNUM];
int knapsack(int itemIndex,int vol);
void main()
{
int i=0,j=0;
while(i<GOODSNUM)
{
cout<<"input the "<<i+1<<"th item(volume and value):";
cin>>nVol[i]>>nValue[i];
i++;
}
cout<<"The max value is: "<<knapsack(GOODSNUM,CAPACITY)<<endl;
}
int knapsack(int itemIndex,int vol)
{
if (itemIndex==0||vol==0)
{
return 0;
}
else if (vol>=nVol[itemIndex] && knapsack(itemIndex-1,vol)<knapsack(itemIndex-1,vol-nVol[itemIndex])+nValue[itemIndex])
{
return knapsack(itemIndex-1,vol-nVol[itemIndex])+nValue[itemIndex];
}
else
return knapsack(itemIndex-1,vol);
}
本文介绍了一个使用C++实现的0-1背包问题解决方案。通过递归的方式计算在给定容量限制下,如何选择物品以达到价值最大化。程序首先让用户输入每个物品的体积和价值,然后调用递归函数计算最大价值。
812

被折叠的 条评论
为什么被折叠?



