三大背包问题c++(秀儿,你坐下好吗?)

本文深入讲解背包问题的三种类型:01背包、完全背包和多重背包的算法实现。通过实例说明如何利用动态规划求解最大价值,适用于不同条件下的物品选择问题。

各位小哥哥,你们有女朋友吗?没有的,请自觉退出,谢谢合作,女生的话,你们随意

你们有没有遇到这样的问题 :就是你们要出去玩,干啥我就不说的太清了,反正你们就是想出去玩,但是,你们的背包太小了,装不下所有的东西,但是由于你的女朋友的心情完全取决于你带的所有物品的总价值高不高,你为了让你女朋友开心,你就开始学习了这个算法。。。。嘿嘿嘿

所有题目的前提:假设你们有n件物品,背包可以装下物品最大重量是m,第 i 件物品的价值是v[i],重量是w[i](是不是感觉无从下手,来来来,爸爸帮你,,,)

原材料:w[],v[]数组记录状态,n,m就不多说了,dp[]来记录当前最优解

  1. 01背包
    题目:(假设你们很穷)每件物品只有一个
for(i=1;i<=n;i++)
		for(j=m;j>=w[i];j--)
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
  1. 完全背包
    题目:(假设你们很富)每件物品有无数个
for(i=1;i<=n;i++)
		for(j=w[i];j<=m;j++)
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
  1. 多重背包
    题目:(假设你们很一般。。。)每件物品只有有限个
for(i=1;i<=n;i++)
	{
		for(j=m;j>=1;j--)
		{
			k=min(j/w[i],num[i]); 
			for(t=1;t<=k;t++)
				if(k*w[i]<=j)
					dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
		}
	}

得到的就是最优解的一个数组,dp[m]就是能放入的最大价值
什么?你还没看明白?来来来,这里有详解>>>>>>>>>>>>一般比较笨的人,才会点我

在这里插入图片描述
什么?你没有女朋友?来来来,出门右拐,那里有一个墙,你去自闭吧,想想为啥别人都有,就你没有,啧啧啧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值