当前位置: 首页> 科技> 数码 > 网络营销是怎么回事_青岛网站设计建议i青岛博采_专门做推广的软文_南京seo推广优化

网络营销是怎么回事_青岛网站设计建议i青岛博采_专门做推广的软文_南京seo推广优化

时间:2025/7/11 15:15:34来源:https://blog.csdn.net/2401_86659618/article/details/144445951 浏览次数:2次
网络营销是怎么回事_青岛网站设计建议i青岛博采_专门做推广的软文_南京seo推广优化

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

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sumNum = 0;for(int i = 0;i < stones.size();++i){sumNum += stones[i];}int target = sumNum / 2;vector<int>dp(target + 1, 0);for(int i = 0;i < stones.size();++i){for(int j = target;j >= stones[i];--j){dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return sumNum - dp[target] - dp[target];}
};

思考了很久不知道为什么将一堆石头划分为质量最接近的两堆,然后他们之差就是最后的结果.

后来仔细想了想还是想出来了,以下是我的理解:

可以将两堆抽象为两杯水,我们把两堆石头各化为水装进两个杯子,如果两个杯子水的总量相同,证明我们可以将所有石头全部碰碎(目前为止没有问题)

我们采取的方法是将石头划为质量最接近的两堆,因为质量最接近,如果质量相等直接返回0.如果不相等,说明我们使用的01背包方法已经为我们找到了尽可能装满sumNum/2的最优解,即能够使得碰撞后剩下的最后一个石头最小,(我的疑虑是为什么结果不是一边剩下两块石头或更多,但实际上,这种情况并不会出现,因为如果出现这种情况,说明左右总大小还不是最接近sumNum/2的最优解),最优解就是保证了左右碰撞后只能剩下最后一个石头,并且其在所有碰撞结果中最小.

这题我简化为两杯水去理解,结果就是豁然开朗,可以吧石头的碰撞简单地想象为消消乐(水与水之间的消消乐).

题外话:二刷到动态规划,还是觉得自己在动态规划这方面没有充分的理解,我觉得未来还要考虑三刷

关键字:网络营销是怎么回事_青岛网站设计建议i青岛博采_专门做推广的软文_南京seo推广优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: