第一次写博客,原本计划自己办一个网站来写代码,发现实现起来还是有点困难,so......
这是经典动态规划初级问题
这样写的深度是2的n次方,重复计算了某些情况
01背包
有n个重量的价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值
限制条件
1≤n≤100
1≤wivi≤100
1≤W≤10000
样例
输入
n=4
{w,v}={{2,3},{1,2},{3,4},{2,2}}
w=5
输出
7(选择了0,1,3号物品)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int res,i,j,n,weightlimit;
int weight[100]={0},value[100]={0};
int max(int a,int b){
if(a>b) return a;
else return b;
}
int rec(int i,int j){
if(i==n){
res=0;
}
else if(j<weight[i]){
res=rec(i+1,j);
}
else{
res=max(rec(i+1,j),rec(i+1,j-weight[i])+value[i]);
}
return res;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>weight[i];cin>>value[i];
}
cin>>weightlimit;
cout<<rec(0,weightlimit)<<endl;
}
BEST LOVE FOR 李明蔚