当前位置: 首页 > news >正文

余姚网站建设公司临沂百度推广多少钱

余姚网站建设公司,临沂百度推广多少钱,图书销售网站设计怎么做,设计软件网站定制开发题目描述 原题链接:2. 01背包问题 解题思路 (1)二维dp数组 动态规划五步曲: (1)dp[i][j]的含义: 容量为j时,从物品1-物品i中取物品,可达到的最大价值 (2…

题目描述

在这里插入图片描述
在这里插入图片描述
原题链接:2. 01背包问题

解题思路

(1)二维dp数组

动态规划五步曲:

(1)dp[i][j]的含义: 容量为j时,从物品1-物品i中取物品,可达到的最大价值

(2)递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i]),其中dp[i - 1][j]表示不放物品i时的最大价值;j - v[i]表示给物品i留出空间,dp[i - 1][j - v[i]]表示给物品i留出空间后,放入其余物品可达到的最大价值(由于是按物品递增顺序遍历,因此为从1-i-1的物品),dp[i - 1][j - v[i]] + w[i]表示放入物品i和其余放入其余物品,可到达的最大价值。

(3)dp数组初始化: dp[0][j] = d[i][0] = 0, dp[0][j]中j >= v[i]的取w[i]

(4)遍历顺序: 从小到大,先背包后物品,或先物品后背包都可以。

(5)举例: (省略)

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1010;
int dp[N][N];int main(){int n, m;int v[N], w[N];cin >> n >> m;for(int i = 1; i <= n; i++)         cin >> v[i] >> w[i];for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {// 当前物品重量大于背包容量时,不放该物品if(j < v[i])        dp[i][j] = dp[i - 1][j];// 当前物品重量小于等于背包容量时,在放该物品后和不放该物品之间选择一个最大价值else                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i]);}}cout << dp[n][m] << endl;return 0;
}

(2)优化为一维dp数组(滚动数组)

滚动数组含义:本轮所计算的数,需要用到上一轮的结果,依次类推,滚动计算。

优化成一维那就要在遍历上实现与二维相同的逻辑顺序,从而实现仅用一维就可以代替二维。

动态规划五步曲:

(1)dp[j]数组的含义: 容量为j时,装入的物品可达到的最大价值。

(2)递推公式: dp[j] = max(dp[j], dp[j - v[i]])

(3)dp数组初始化: dp[0] = 0

(4)遍历顺序: 两层for循环,先遍历物品,再遍历背包,内层按背包从大到小递减顺序遍历。
如果删除dp中的维度[i]后,还保持对j的从小到大遍历,那么此时的代码其实是等价于dp[i][j] = max(dp[i][j - 1], dp[i][j - v[i]),在一遍后续遍历中,因为j是从小到大与v[i]相减,在后续相减时,可能会出现本轮遍历中用过的数,会使之前使用过的数重复相加。

而如果以对j进行从大到小遍历,因为此时是j是从mv[i],以此顺序计算dp[j - v[i]]时,在一遍后续遍历中,都是会基于上一轮对i的遍历而进行判定,并且由于j变化而v[i]不变,在后续不会出现使用过的数重复相加。每次遍历到的j所对应dp[j - v[i]]都还没有被更新,就相当于是之前的状态dp[i - 1][j - v[i]],从而得到dp[j] = dp[j - v[i]]就等价于dp[i][j] = dp[i - 1][j - v[i]]

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1010;
int dp[N];int main(){int n, m;int v[N], w[N];cin >> n >> m;for(int i = 1; i <= n; i++)         cin >> v[i] >> w[i];for(int i = 1; i <= n; i++) {// 从后向前遍历,表示装入一个物品后,剩余的可装入容量达到的最大价值for(int j = m; j >= v[i]; j--) {dp[j] = max(dp[j], dp[j - v[i]] + w[i]);}}cout << dp[m] << endl;return 0;
}

参考文章:AcWing 2. 01背包问题(状态转移方程讲解) 、AcWing 2. 01背包问题 、动态规划:关于01背包问题,你该了解这些!(滚动数组)

http://www.hrbkazy.com/news/15350.html

相关文章:

  • 网站二次开发没人做搜索引擎优化课程
  • 哪些公司网站做的很好南昌百度推广联系方式
  • 上门做网站公司哪家好免费平台
  • 怎么修改网站图片seo公司排行
  • 网站排名怎样做有效抖音优化是什么意思
  • 个人工商户做网站备案成都电脑培训班零基础
  • 如何做网站镜像互联网营销策划方案
  • 京东商城网站开发平台移动端seo关键词优化
  • 做java一个网站厦门网络推广外包多少钱
  • 洛阳网站建设设计公司优量汇广告平台
  • 网站建设项目计划书如何写seo服务哪家好
  • 网站版建设数据查询网站
  • 建设银行观澜支行网站宜兴百度推广公司
  • 好的建站网站大连今日新闻头条
  • 网站建设能够不同地方百度人工客服
  • 营销网站制作免费咨询谷歌seo是什么意思
  • 胶州网站开发百度收录最新方法
  • 聊城集团网站建设怎么推广淘宝店铺
  • 网站建设的资金风险网络营销心得体会1000字
  • 购物网站设计意义信息流广告投放渠道
  • 保山市住房和城乡建设厅网站安卓优化大师历史版本
  • 石家庄网站推广软件100种找客户的方法
  • 站群cms百度的网址是多少
  • 上门服务做眉毛是哪个网站淘宝营销推广方案
  • 阿里巴巴网站运营怎么做今日热点新闻头条排行榜
  • 成都营销型网站建设合肥网络公司
  • 自己做彩票网站合法吗深圳推广公司哪家正规
  • 公司网站服务商sq网站推广
  • 网站建设素材模板下载谷歌网页版入口在线
  • 工业云网站建设网站怎么优化关键词排名