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

最后一块石头的重量(超级妙的背包问题)

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

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

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

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,**最多只会剩下一块 **石头。返回此石头 **最小的可能重量 **。如果没有石头剩下,就返回 0

示例 1:

**输入:**stones = [2,7,4,1,8,1]
**输出:**1
**解释:**
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。

示例 2:

**输入:**stones = [31,26,33,21,40]
**输出:**5

提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 100

这一题很难想到背包问题

这道题看出是背包问题比较有难度
最后一块石头的重量:从一堆石头中,每次拿两块重量分别为x,y的石头,若x=y,则两块石头均粉碎;若x<y,两块石头变为一块重量为y-x的石头求最后剩下石头的最小重量(若没有剩下返回0)
问题转化为:把一堆石头分成两堆,求两堆石头重量差最小值

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int n = stones.size();int sum = 0;for (auto u : stones) {sum += u;}int bag = sum / 2;vector<int> dp(bag + 1, 0);for (int i = 0; i < n; i++) {for (int j = bag; j >= stones[i]; j--) {dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return sum - dp[bag];}
};
http://www.lryc.cn/news/413497.html

相关文章:

  • 如何评估和提升审查者在前端代码审查中的专业技能?
  • C++(区别于C的)基础内容总结
  • 实现代码灵活性:用Roslyn动态编译和执行存储在数据库中的C#代码
  • 探索哈希表:C++中的实现与操作详解【Map、Set、数据结构】
  • Python酷库之旅-第三方库Pandas(062)
  • python学习之旅(基础篇看这篇足够了!!!)
  • Azure OpenAI Embeddings vs OpenAI Embeddings
  • 重生奇迹MU职业成长三步走
  • 2024年中国数据中台行业研究报告
  • MySQL——数据表的基本操作(一)创建数据表
  • EPLAN EDZ 文件太大导入很慢如何解决?
  • 刷题——缺失的第一个正整数
  • 代理设置--一些库的代理设置
  • Debezium系列之:PostgreSQL数据库赋予账号数据采集权限的详细步骤
  • javascript:判断输入值是数字还是字母
  • Java-排序算法-复盘知识点
  • HarmonyOS 原生智能之语音识别实战
  • 基于Gromacs的蛋白质与小分子配体相互作用模拟教程
  • Ubuntu下python3.12安装, 分布式 LLM 推理 exo 安装调试过程, 运行自己的 AI 集群
  • pytest-bdd 行为驱动自动化测试
  • PostgreSQL11 | 触发器
  • cesium canvas广告牌
  • 使用Floyd算法求解两点间最短距离
  • linux“how_paras.sh“ E212: 无法打开并写入文件
  • CSS mask-image 实现边缘淡出过渡效果
  • 电子元器件—电容和电感(一篇文章搞懂电路中的电容和电感)(笔记)(面试考试必备知识点)电容和电感作用、用途、使用、注意事项、特点等(面试必备)-笔记(详解)
  • 2024HDU Contest 5 Problem 5
  • nGQL入门
  • [CP_AUTOSAR]_系统服务_DEM模块(二)功能规范介绍
  • Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget