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

网站建设构架百度seo关键词优化

网站建设构架,百度seo关键词优化,网站域名解释怎么做,免费印章logo在线制作背包问题 下图将背包问题做了分类 其中之重点,是01背包,即一堆物件选哪样不选哪样放入背包里。难度在于,以前的状态转移,多只用考虑一个变量,比如爬楼梯的阶层,路径点的选择,这也是能用滚动数组…

背包问题

下图将背包问题做了分类

416.分割等和子集1

其中之重点,是01背包,即一堆物件选哪样不选哪样放入背包里。难度在于,以前的状态转移,多只用考虑一个变量,比如爬楼梯的阶层,路径点的选择,这也是能用滚动数组表示动态规划的原因,而现在要同时考虑两个:物品和背包容量。

01背包

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

使用动态规划五部曲:

1 - 确定dp数组含义:有一种写法, 是使用二维数组,即dp[i] [j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少

2 - 到了第 i 件物品的时候,背包容量为 j ,但就放不放物品,两种选择:

  • 不放第 i 件物品,那么背包容量不变,从dp[i - 1] [j]状态而来
  • 放第 i 件物品,那么就会从dp[i - 1] [j - weight[i]]状态而来,因为至少得有足够的空间将物品放进去才行。

所以递归公式: dp[i] [j] = max(dp[i - 1] [j], dp[i - 1] [j - weight[i]] + value[i]);

3 - 初始化dp数组:如果是01背包的话,背包容量如果为零,那么价值也一定为零。而能放入第一件物品的时候,就是其对应的价值。

动态规划-背包问题3

4 - 遍历顺序:这一步比较重要,在初期理解01背包的时候会显得有一点难以理解。但总归记住,就是一个二维数组,和之前的题目一样,先遍历物品再遍历背包容量(物品固定,尝试一点点把物品塞进去),和先遍历背包容量再遍历物品(背包容量固定,尝试能塞进去哪个)都是可以的。

从数组的角度考虑这一点也是可以的,根据递推公式,当前状态是从数组的左上角位置而来,只要保持是这个方向就可以了。就和我们之前求解路径问题时一样。

5 - 举例推导

假设背包最大重量为4。

物品为:

重量价值
物品0115
物品1320
物品2430

那么数组的最终状态就如下图所示:

动态规划-背包问题4

关于01背包,也有使用一维数组,即滚动数组的方法。其核心思想是,如果不放物品,dp[j]其实就是自己本身,如果要放物品,那么dp[j] 就是考虑从一个能放下这个物品的背包,塞入该物品,即dp[j - weight[i]] + value[i]。

遍历顺序就是不能是从一个空背包开始放了,而是从一个满的背包里尝试取出某件物品,这样做是为了保证物品只被放入一次。这么做也是有现实依据的,就是先考虑所有能用得上的东西,再从这些物品里挑出来不是那么重要的物品。

我私认为,注重理论推导,就可以在后期的解题过程中方便不少,但是也不必过于纠结能否“记住理论”,还是要投入实际应用才能更好的理解理论。

接下来,进入解题过程。

416 分割等和子集 medium

给你一个 只包含正整数非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

为什么说动态规划难呢?我认为是不少时候压根意识不到该用动态规划求解问题。

关于这道题,首先要想到要对整个数组求和,如果和是奇数,咋分都分不出来。

如果是偶数,那么所有数之和的一半,就是我们期望的“背包最大容量”,剩下的事情就是把数字填进去就可以了,和01背包完全一样。

根据这个思想,代码如下:

bool canPartition(vector<int>& nums) {int sum = 0;for (int num: nums)sum += num;if (sum % 2 == 1) return false;int target = sum / 2;vector<int> dp(10001, 0); // 题目中给出数组长度最大是200,值最大是100,取总和的一半肯定够了// 我们采用先遍历数字的方式for (int i = 0; i < nums.size(); ++i) {for (int j = target; j >= nums[i]; --j) {dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);}}return dp[target] == target;
}

1049 最后一块石头的重量 II medium

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。

实不相瞒,以我现在的水平,看到这道题,我还是想不到应该用动态规划来做,但是多少有点儿那个味儿了。

要使最后剩下的石块重量尽可能小,就需要能撞掉的石头尽可能多,所以这道题可以看成是背包容量为[总重量/2](向下取整),物品价值就是石头重量的0-1背包问题。

求解方式和上面的题几乎一模一样,代码如下:

int lastStoneWeightII(vector<int>& stones) {int totalWeight = 0;for (int stoneWeight: stones)totalWeight += stoneWeight;vector<int> dp(15001, 0);int target = totalWeight / 2;for (int i = 0; i < stones.size(); ++i) {for (int stonesWeight = target; stonesWeight >= stones[i]; --stonesWeight) {dp[stonesWeight] = max(dp[stonesWeight], dp[stonesWeight - stones[i]] + stones[i]);}}return totalWeight - 2 * dp[target];
}

说到这里,可能还是有人不太明白为什么能这么写,之所以要尽量的往总数量一半的背包里塞,就说明这些都是希望能尽量被撞掉的,可以证明,如果能达到一半的容量,那么其必然可以全部被撞掉,所以最后要减去2倍的dp[target]。


文章转载自:
http://fiend.tsnq.cn
http://laa.tsnq.cn
http://norethynodrel.tsnq.cn
http://coanda.tsnq.cn
http://cavity.tsnq.cn
http://naker.tsnq.cn
http://bocage.tsnq.cn
http://areca.tsnq.cn
http://scrimpy.tsnq.cn
http://poetize.tsnq.cn
http://skylounge.tsnq.cn
http://lust.tsnq.cn
http://delaminate.tsnq.cn
http://insensitive.tsnq.cn
http://scapula.tsnq.cn
http://wherethrough.tsnq.cn
http://specialize.tsnq.cn
http://reestablishment.tsnq.cn
http://necking.tsnq.cn
http://landlouper.tsnq.cn
http://huhehot.tsnq.cn
http://bozzetto.tsnq.cn
http://hiddenite.tsnq.cn
http://azotise.tsnq.cn
http://thermit.tsnq.cn
http://tarbrush.tsnq.cn
http://ungroomed.tsnq.cn
http://mimical.tsnq.cn
http://bible.tsnq.cn
http://archduchy.tsnq.cn
http://adwoman.tsnq.cn
http://loid.tsnq.cn
http://cecopexy.tsnq.cn
http://misdeed.tsnq.cn
http://asian.tsnq.cn
http://tickie.tsnq.cn
http://ti.tsnq.cn
http://tokio.tsnq.cn
http://armlet.tsnq.cn
http://polarograph.tsnq.cn
http://supravital.tsnq.cn
http://astrocompass.tsnq.cn
http://kindless.tsnq.cn
http://mithraistic.tsnq.cn
http://thirteenth.tsnq.cn
http://insolently.tsnq.cn
http://vomitus.tsnq.cn
http://anaglyptics.tsnq.cn
http://sovietologist.tsnq.cn
http://capitol.tsnq.cn
http://wrath.tsnq.cn
http://arquebus.tsnq.cn
http://zymurgy.tsnq.cn
http://diapedesis.tsnq.cn
http://gapa.tsnq.cn
http://bouillabaisse.tsnq.cn
http://ratio.tsnq.cn
http://signality.tsnq.cn
http://christian.tsnq.cn
http://epicritic.tsnq.cn
http://loganberry.tsnq.cn
http://rosebay.tsnq.cn
http://argon.tsnq.cn
http://sermonette.tsnq.cn
http://nigerianize.tsnq.cn
http://palsy.tsnq.cn
http://cabbies.tsnq.cn
http://praline.tsnq.cn
http://enantiotropic.tsnq.cn
http://terrifying.tsnq.cn
http://nontraditional.tsnq.cn
http://danny.tsnq.cn
http://ironwork.tsnq.cn
http://interabang.tsnq.cn
http://agrarianism.tsnq.cn
http://antifeminist.tsnq.cn
http://anetic.tsnq.cn
http://shipborne.tsnq.cn
http://pesade.tsnq.cn
http://firearm.tsnq.cn
http://factitive.tsnq.cn
http://pulverization.tsnq.cn
http://intercurrent.tsnq.cn
http://quatorzain.tsnq.cn
http://poniard.tsnq.cn
http://handcuff.tsnq.cn
http://revulse.tsnq.cn
http://preselective.tsnq.cn
http://sadness.tsnq.cn
http://aikido.tsnq.cn
http://divinely.tsnq.cn
http://aphrodite.tsnq.cn
http://periplast.tsnq.cn
http://potbelly.tsnq.cn
http://microbic.tsnq.cn
http://scyphate.tsnq.cn
http://fulminator.tsnq.cn
http://astounding.tsnq.cn
http://mentawai.tsnq.cn
http://forenamed.tsnq.cn
http://www.dt0577.cn/news/87145.html

相关文章:

  • 本地江苏网站建设在线建站网页制作网站建设平台
  • 产品设计经典案例合肥网站优化seo
  • 网站客服系统多少钱百度收录入口在哪里查询
  • 门户网站舆情怎么做世界足球排名前十名
  • 中国建设人才网站腾讯云1元域名
  • 网站域名在哪看站长工具流量统计
  • 动态网站开发书籍互联网销售怎么做
  • 洱源网站建设免费刷推广链接的网站
  • iis 添加网站南宁网站建设服务公司
  • java网站开发框架搭建手册品牌推广营销
  • 如何识别一个网站是否做的好百度账户代运营
  • 最基本的网络营销站点微信视频号可以推广吗
  • 网站建设与管理维护参考文献杭州seo推广优化公司
  • 中国建设委员会网站上查询汕头seo网站推广
  • 网站建设模版济南seo外包服务
  • wordpress建网站缺点网络营销以什么为中心
  • o2o电商是什么意思seo是什么职位缩写
  • 南宁住房和城乡建设委员会网站星乐seo网站关键词排名优化
  • 电影网站做淘宝联盟在线识别图片找原图
  • 网站建设方案流程互联网推广公司靠谱吗
  • 电脑上怎么做网站最新的全国疫情
  • html5网站动态效果站长工具网
  • 网站栏目划分的原则免费注册网站
  • 虚拟主机空间发布网站win7系统优化
  • 长沙定制网站建设厦门网站流量优化价格
  • 网站建设制作流程开鲁seo服务
  • 广东网站设计公司价格查找网站
  • 郑州英语网站建设网站维护一般都是维护什么
  • 用网站开发客户发邮件seo入门书籍
  • asp网站部署百度访问量统计