01背包问题

第一次写博客,原本计划自己办一个网站来写代码,发现实现起来还是有点困难,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 李明蔚
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值