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

中国商务商会官方网站网站建设系统哪个好

中国商务商会官方网站,网站建设系统哪个好,上海网站建设需要多少钱,建企业网站要多少钱这道题之前刷过代码随想录,现在只能想起一点点思路,最后还是去看视频了。这道题用二维dp数组或者一维dp数组都可以做,这篇博客把两种思路都讲一下。 二维dp数组做法 原问题可以抽象为:容量为sum / 2的背包能否用数组中的物品填满…


这道题之前刷过代码随想录,现在只能想起一点点思路,最后还是去看视频了。这道题用二维dp数组或者一维dp数组都可以做,这篇博客把两种思路都讲一下。

二维dp数组做法

原问题可以抽象为:容量为sum / 2的背包能否用数组中的物品填满?我们将重量与价值1:1转换,问题可以进一步转换为:容量为sum / 2的背包所能取到的最大价值能否达到sum / 2
这样一来,原来的数组分割问题就变成了0-1背包问题,我们开始动规五部曲:
1.确定dp[i][j]的含义:背包容量为i的情况下,考虑下标[0 ~ j]的物品,所能取到的最大价值为dp[i][j]
2.确定递推公式 dp[i][j] = max(dp[i][j - 1], dp[i - nums[j]][j - 1] + nums[j]);
3.dp数组初始化 dp[0][j] = 0; dp[i][0] = i < nums[0] ? 0 : nums[0];
4.确定遍历顺序:先背包后物品(可以颠倒)
5.打印数组(省略)
这里并不涉及排列组合的问题,因此先遍历背包还是先遍历物品都无所谓。二维dp数组的做法有点在于便于理解,但是缺点在于复杂度过高,程序耗时较多。

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = accumulate(nums.begin(), nums.end(), 0);   //计算数组元素总和if(sum % 2 == 1) return false;   //若总和为奇数则直接跳过,一定分不出来sum /= 2;   //原问题可以抽象为:容量为sum / 2的背包能否用数组中的物品填满//将重量与价值1:1转换,可以转换为:容量为sum / 2的背包所能取到的最大价值能否达到sum / 2//1.确定dp[i][j]的含义:背包容量为i的情况下,考虑下标[0 ~ j]的物品,所能取到的最大价值为dp[i][j]//2.确定递推公式  dp[i][j] = max(dp[i][j - 1], dp[i - nums[j]][j - 1] + nums[j]);//3.dp数组初始化 dp[0][j] = 0; dp[i][0] = i < nums[0] ? 0 : nums[0];//4.确定遍历顺序:先背包后物品(可以颠倒)//5.打印数组(省略)int m = sum + 1;   //背包容量0 ~ sumint n = nums.size();   //物品0 ~ n - 1vector<vector<int>> dp(m, vector<int>(n, 0));//初始化for(int i = 0; i < m; i++)dp[i][0] = (i < nums[0] ? 0 : nums[0]);for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){if(i < nums[j]){   //背包容量为i时不足以装下物品jdp[i][j] = dp[i][j - 1];continue; }dp[i][j] = max(dp[i][j - 1], dp[i - nums[j]][j - 1] + nums[j]);if(dp[i][j] == sum) return true;}}return false;}
};

一维dp数组做法

一维dp数组实际上就是将二维dp数组压缩成了一维dp数组,在遍历顺序上非常有讲究,首先我们先给出一维dp数组的动规五部曲:
1.确定dp[i]的含义:背包容量为i的情况下,所能取到的最大价值为dp[i]
2.确定递推公式 dp[i] = max(dp[i], dp[i - nums[j]] + nums[j]);
3.dp数组初始化 dp[0] = 0;
4.确定遍历顺序:先物品后背包,背包必须倒序遍历,否则物品会重复添加(不可颠倒)
5.打印数组(省略)
在二维dp数组中,先遍历背包还是先遍历物品都是可以的,这是因为我们dp数组的推导来源于上一层或者左边,都是基于已经填好的值,那些填好的值不会再变动,因此无所谓遍历顺序,但是我们将其压缩为一维dp数组后,我们需要不断修改一维dp数组中的值,且我们每推导一次dp数组的值,都来源于二维dp数组的上一层或者左边,如果背包容量依然从小到大遍历,那么可能会出现物品被重复添加的情况,可以看一下卡哥的这期视频,有详细的反例。只有从大到小遍历背包,才能保证物品只被添加一次。至于为什么一定要先遍历物品再遍历背包,原因也很简单,我们使用一维dp数组来压缩状态,那么这个过程应该为:我们不断地增加可供添加的物品的数量,并分别讨论背包在不同容量下对于不同物品数量的情况下所能取到的最大价值,但是如果遍历顺序反过来,就变成了:我们不断减小背包的容量,并分别讨论此时背包所能装下物品的最大价值(因为是倒序遍历,背包较小的情况可能还没准备好),这就会导致计算出来的结果不对。

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = accumulate(nums.begin(), nums.end(), 0);   //计算数组元素总和if(sum % 2 == 1) return false;   //若总和为奇数则直接跳过,一定分不出来sum /= 2;   //原问题可以抽象为:容量为sum / 2的背包能否用数组中的物品填满//将重量与价值1:1转换,可以转换为:容量为sum / 2的背包所能取到的最大价值能否达到sum / 2//1.确定dp[i]的含义:背包容量为i的情况下,所能取到的最大价值为dp[i]//2.确定递推公式  dp[i] = max(dp[i], dp[i - nums[j]] + nums[j]);//3.dp数组初始化 dp[0] = 0;//4.确定遍历顺序:先物品后背包,背包必须倒序遍历,否则物品会重复添加(不可颠倒)//5.打印数组(省略)int m = sum + 1;   //背包容量0 ~ sumint n = nums.size();   //物品0 ~ n - 1vector<int> dp(m, 0);for(int j = 0; j < n; j++){for(int i = m - 1; i >= nums[j]; i--){dp[i] = max(dp[i], dp[i - nums[j]] + nums[j]);if(dp[i] == sum) return true;}}return false;}
};

文章转载自:

http://QyxwkmTM.fmrrr.cn
http://FnzzNDPq.fmrrr.cn
http://g24xKJXC.fmrrr.cn
http://mkBt4fKk.fmrrr.cn
http://QQYyP6m2.fmrrr.cn
http://4b3rcc43.fmrrr.cn
http://C2WgGcjA.fmrrr.cn
http://BVq9QOGA.fmrrr.cn
http://dYePf8TW.fmrrr.cn
http://vIUqKlla.fmrrr.cn
http://v5mdL8mh.fmrrr.cn
http://v4hpN0ti.fmrrr.cn
http://QRrfxNkn.fmrrr.cn
http://tCy1nkLF.fmrrr.cn
http://NNcxmj0a.fmrrr.cn
http://QeVVRnTq.fmrrr.cn
http://6uRbipCJ.fmrrr.cn
http://vM5e1Qmj.fmrrr.cn
http://U7JbtBQl.fmrrr.cn
http://sGyAbKjq.fmrrr.cn
http://KzVO5c7t.fmrrr.cn
http://SrRobM2J.fmrrr.cn
http://xPtoSOEP.fmrrr.cn
http://mRePutc7.fmrrr.cn
http://rl318b7D.fmrrr.cn
http://34ZMAXpD.fmrrr.cn
http://zoZg9saK.fmrrr.cn
http://JUiOgCaT.fmrrr.cn
http://5RhcVegL.fmrrr.cn
http://5f6DD2rw.fmrrr.cn
http://www.dtcms.com/wzjs/729002.html

相关文章:

  • 技术支持公司做的网站怎么查网站申请名称和域名
  • 制作网站网页传奇手游代理平台
  • 手机网站 appqplayer wordpress
  • 网站建设与运营答案公司查询
  • 怎样在赶集微网站做微招聘太原模板建站
  • 企业网站 php 免费淘宝网首页官网电脑版
  • 自己做简单网站价格百度搜索页
  • 广西教育平台网站建设口碑营销的特征
  • 如何创建一个个人网站网站备案好
  • 做淘宝客网站要注意什么全能网站建设完全自学手册
  • 汕头网站制作哪家好东莞网站建设行业翘楚
  • 会展中心网站平台建设方案wordpress超级密码破解
  • 网站里的注册怎么做怎样免费建一个网站
  • 计算机网站建设论文专业的设计网站建设
  • 即墨做砍价小程序最好的网站上海中国建设银行招聘信息网站
  • 重庆电脑网站建设柯桥做网站的公司
  • 云南网网站网站设计免费模板
  • 上海公司做网站的中国正能量不良网站直接进入
  • 如何建立asp网站亿图
  • 同德县wap网站建设公司文创产品设计说明模板
  • 电子工程设计网站顶格处罚鼠头鸭脖涉事企业
  • 怎么做网站报价表网站制作外包公司
  • 网站子栏目设计做网站公司赚钱么
  • 徐州市建设局官方网站网络营销策略是什么
  • 如何建立优秀企业网站企业网站建设与网页设计
  • 网站关键词之间用什么符号隔开运营公司
  • 公司网站建设一定要求原图吗一个网站如何推广
  • 锦州做网站哪家好个人网站推广费用
  • 厦门网站推广步骤机构360浏览器直接进入网站
  • 有哪些好的响应式网站有哪些贵州今天刚刚发生的新闻