动态规划——背包

博客探讨了动态规划在解决背包问题中的应用,包括不同类型的背包问题,如求最小剩余空间、最大价值等。通过代码示例展示了如何使用动态规划求解这些问题,并引入了双背包模型解决潜水员装备最轻问题。
摘要由CSDN通过智能技术生成

背包经典问题:

背包问题01:

         一个背包容积为T(0<=T<=2000),现在有N(0<N<=1000)个物品,每个物品有一定体积V(1<=V<=5000)。从这N个物品中选取若干个装入背包内,使背包所剩的空间最小。请求出最小的剩余空间?

        代码如下:

#include<cstdio>
using namespace std;
int s[1005];
bool f[3000];
int main(){
	int i,k,ans=0,v,n;
	scanf("%d%d",&v,&n);
	for(i=1;i<=n;i++)scanf("%d",&s[i]);
	f[0]=true;
	for(i=1;i<=n;i++)
	 for(k=v;k>=s[i];k--)//物品有限,反序枚举空间;
	  if(f[k-s[i]])f[k]=true;//f[k-s[i]]=true表示状态f[k]可以通过加上s[i]达到;
	for(i=v;i>0;i--)//找出答案;
	if(f[i]){printf("%d",v-i);return 0;}
}

背包问题02

       
      若每种物品有无限多个。从这N种物品中选取若干个装入背包内,使背包所剩的空间最小。请求出最小的剩余空间?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值