背包问题——01背包总结

写这篇博客的原因是因为自己初学背包的时候觉得好玄学。只是知道怎么写,但是具体是为什么觉得很玄妙。

在此其实希望和我一样的小白萌新早点明白其中的原理,其实原理很简单,‘

推荐一篇我觉得很好理解的博客:

https://blog.youkuaiyun.com/qq_32146369/article/details/62069865

只要懂了这个图,我想01背包就不成问题了。

首先要明确这张表是至底向上,从左到右生成的。

关于01背包的题目暂时整理了一点。

 

1.简单01背包:

https://blog.youkuaiyun.com/nvliba/article/details/49406379

2.01背包+思维。POJ 3628 Bookshelf 2(DP:01背包)

要考虑到一共价值是s,那么选择的s-h的背包中价值最大maxx,然后用s-h-maxx就是多出h的那一小部分最小,因为总和是一定的所以一定可以装满h+多出的一小部分。

https://blog.youkuaiyun.com/u013480600/article/details/22763769

3.HDU 2546饭卡(DP:01背包)

思路就是让总容量-5(因为余额大于5才能买一个最大的)求个背包,再减掉最大的物品。

https://blog.youkuaiyun.com/u013480600/article/details/22793801

4.Robberies(01背包+概率)

把银行的钱当做背包,把概率当做价值,总容量为所有银行的总钱数,求不超过被抓

概率的情况下,最大的背包容量是多少

 dp[j] = max(dp[j],dp[j-Bag[i].v]*(1-Bag[i].p))(dp[j]表示在被抢概率j之下能抢的钱);

https://blog.youkuaiyun.com/lianai911/article/details/40183907

5.https://blog.youkuaiyun.com/u013480600/article/details/22793943

没看懂。。。贪心+背包。

***6.   01背包+按照背包的顺序输出路径。

UVA 624 CD(DP:01背包)

可以这么想,每一个背包都跟能容纳他的容量有联系,用vis进行标记。

然后每一个东西都判断一下跟当前选的东西有无影响。

https://blog.youkuaiyun.com/xianpingping/article/details/81914776

https://blog.youkuaiyun.com/u013480600/article/details/22819213

7.背包+思维

UVA 562  Dividing coins(DP:01背包)

就是怎么分两堆硬币,使得两堆差值最小。以sum/2为背包容量得解。

https://blog.youkuaiyun.com/u013480600/article/details/22822593

8.思维poj3211(Washing Clothes + 0/1背包)

sum/2的思想:https://blog.youkuaiyun.com/wy_kath/article/details/7856414

9.hdu 1203- I NEED A OFFER!(概率)(反着想)

这道题让求得到至少得到一份offer的最大概率,直接对这个问题进行处理有些麻烦,那么我们可以通过算出一份offer也拿不到的最小概率,通过概率和是1我们就可以得到要求的答案了,跟抢劫那一题比较像,概率是相乘而不是相加

https://blog.youkuaiyun.com/qq_35323001/article/details/52242393

***10.POJ 1837 Balance(感觉这道题跟背包没关系。。。)(好题!)

https://blog.youkuaiyun.com/lyhvoyage/article/details/45064083

11.好题!二维背包

HDU 3496 Watch The Movie

https://blog.youkuaiyun.com/madaidao/article/details/35991521

题意:有商品个数限制的背包问题。

在普通的背包问题上再开一维表示已经买了的商品的个数。dp[i][j][k]表示前i个物品,花费为j,已经买了K个商品的最大价值。

转移方程为:

dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-v][k-1]+w)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值