#include <iostream>
using namespace std;
#define W 100
#define N 20
int w[N];
int v[N];
int x[N];
int knapsack(int n,int m)
{
if (n==0||m==0)
{
return 0;
}
else if ((m>=w[n])&&(knapsack(n-1,m)<(knapsack(n-1,m-w[n])+v[n])))
{
x[n]=1;
return knapsack(n-1,m-w[n])+v[n];
}
else
{
x[n]=0;
return knapsack(n-1,m);
}
}
int main()
{
int m,n;
int i=0;
while(1)
{
cout<<"请输入背包的容量(m)和物品个数(n):"<<endl;
cin>>m>>n;
cout<<"请输入每个物品的重量(w)和物品的价值(v):"<<endl;
for(i=1; i<=n; i++)
{
cout<<"请输入第"<<i<<"个背包的信息(重量,价值):";
cin>>w[i]>>v[i];
}
cout<<"背包的最优解为:"<<endl<<knapsack(n,m)<<endl;
cout<<"最优解条件下选择的背包为:"<<endl;
for(i=1; i<=n; i++)
{
if(x[i])
cout<<i<<" ";
}
cout<<endl;
}
return 0;
}
01背包的递归求解
最新推荐文章于 2022-10-30 13:36:21 发布