【日志】01背包(简单讨论)

本文探讨了01背包问题及其状态转移方程,并详细分析了一道与01背包相似的问题,该问题要求从n个正整数中选择一些,使它们的和模k等于0,求最大和。通过扩展01背包思想,提出两种状态转移方程,正向和反向,用于解决这个问题。
摘要由CSDN通过智能技术生成

01背包

01背包问题简单来说,是允许放置是放或者不放这个物品的问题。

状态转移方程

虽然这玩意叫做状态转移方程,但是一直感觉还是属于递推的方式

一般的01背包问题都有如下这个状态转移方程。
f ( i , j ) = max ⁡ { f ( i − 1 , j ) , f ( i − 1 , j − v ) + w } f(i,j)=\max\{ f(i-1,j),f(i-1,j-v)+w\} f(i,j)=max{ f(i1,j),f(i1,jv)+w}
其中, i i i指的是考虑第 i i i个物品(前面 i − 1 i-1 i1个物品是不考虑的,默认已经得到了其最优状态), j j j指的是目前的可花费代价,比如容量、剩余零花钱等。

上面那个递推方程总的概况是:如果可以拿按这个物品,是拿了好,还是不拿的好。

但是这个方程只是一个很笼统的概括。具体来说,01背包问题并不总是按那个方程进行的,但是类似的思想是一致的。

一道类似于01背包的问题

这道题不知道哪里来的,在哪里有看过,但是印象很深

大致问题:给定 n n n个正整数和一个 k k k,这 n n n个数中任意选出几个,只需要满足它们的和取模 k k k后的结果为0即可。请求出其中和最大可以为多少

显然可以考虑01背包的放还是不放的问题。但是在放之前,需要对问题进行一步扩展:问题求的是取模的结果为0的最大值,那么求出 0 0 0 k − 1 k-1 k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值