/*lijingjing
将物品放入背包中的几种可能
1、当物品容量大于该背包容量,则不方入背包,则比较下一个物品 z<w[i]
2、当该物品容量小于该背包容量,分为2种情况
2.1、将物品放在背包里,sum=SUM(i+1,z-w[i])+p[i];
2.2、不吧该物品放在背包里(因为可能出现后面的物品放入背包产生的效益更高)sum=SUM(i+1,z)
*/
#include <iostream>
using namespace std;
int m,n;
int w[10],p[10];
int SUM(int i,int z)
{
int sum;//记录效益
if(i==n){//比较结束,设置结束条件
sum=0;
}
else{
if(z<w[i]){//背包容量小于该物体体积
sum=SUM(i+1,z);
}
else
{
if(SUM(i+1,z)>SUM(i+1,z-w[i])+p[i]){//判断那种情况的效益高
sum=SUM(i+1,z);//不将该物品放在背包中
}
else{//将该物品放在背包中
sum=SUM(i+1,z-w[i])+p[i];//用来累加效益
}
}
}
return sum;
}
void main(){
cin>>m>>n;
for(int i=0;i<n;i++)
{
cin>>w[i]>>p[i];
}
cout<<SUM(0,m);
}
动态规划 0 1背包问题
最新推荐文章于 2024-09-19 11:52:15 发布