DP背包系列(01背包、完全背包、多重背包)(动态规划)

本文介绍了背包问题的三种类型:01背包问题,完全背包问题和多重背包问题。01背包问题中,每个物品只能拿一次,目标是最大化价值。完全背包问题允许每个物品无限次拿起,同样追求价值最大化。多重背包问题则是每个物品有限次拿起,次数各不相同。文章提供了每种问题的模板代码和优化建议,并提及了在特定条件下如何求解最大或最小价值的问题。
摘要由CSDN通过智能技术生成

首先安利一发背包九讲:https://www.cnblogs.com/jbelial/articles/2116074.html

简单说说今天学到的

一:01背包问题

(每个物体只能拿一次,要求在一定的空间内,拿物体使得到的价值最大)

有两种写法,一种是二维数组,一种是一维数组(省空间)

1.二维dp的模板:(很奇怪这种方式在有多个样例输入的情况下,不用清空dp数组)

状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-wei[i]]+val[i]);

基本操作:

if(j>=wei[i])
{
	dp[i][j]=max(dp[i-1][j],dp[i-1][j-wei[i]]+val[i]);//i为面对第几个物体了
    //j为所占的空间大小下,dp数组存的是对应的价值
}
else//这种写二维的方式可不清空 
{
	dp[i][j]=dp[i-1][j];
}

2.一维dp的模板(这种方式切记清空dp数组,还有就是注意要从后往前逆序推,因为这样得到的才是上一个状态的,否则会重复计算)

模板:

状态转移方程:dp[j]=max(dp[j],dp[j-wei[
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值