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

算法:合并石头的最低成本

题目

有 n 堆石头排成一排,第 i 堆中有 stones[i] 块石头。

每次 移动 需要将 连续的 k 堆石头合并为一堆,而这次移动的成本为这 k 堆中石头的总数。

返回把所有石头合并成一堆的最低成本。如果无法合并成一堆,返回 -1 。

示例 1:

输入:stones = [3,2,4,1], K = 2
输出:20
解释:
从 [3, 2, 4, 1] 开始。
合并 [3, 2],成本为 5,剩下 [5, 4, 1]。
合并 [4, 1],成本为 5,剩下 [5, 5]。
合并 [5, 5],成本为 10,剩下 [10]。
总成本 20,这是可能的最小值。

题解

class Solution {private int[][] memo;private int[] s;private int k;public int mergeStones(int[] stones, int k) {int n = stones.length;// (石头数量-1)/(k-1) !=0 说明无法合并成一堆//合并过程:先取k个石头合并一堆,在取k-1个继续合成一堆,依此类推if ((n - 1) % (k - 1) > 0)return -1;s = new int[n + 1];// 前缀和for (int i = 0; i < n; i++)s[i + 1] = s[i] + stones[i];this.k = k;memo = new int[n][n];for (int i = 0; i < n; ++i)// -1 表示还没有计算过Arrays.fill(memo[i], -1); return dfs(0, n - 1);}private int dfs(int i, int j) {if (i == j) return 0; // 只有一堆石头,无需合并if (memo[i][j] != -1) return memo[i][j];int res = Integer.MAX_VALUE;//子问题:起始位置不跟后面的合并,留待后面在合并//起始位置和后面的k-1合并成一堆后,留待后面在合并//起始位置和后面的k-1合并成一堆后,继续跟后面的k-1个合并成一堆,然后留待后面在合并,依此类推for (int m = i; m < j; m += k - 1)res = Math.min(res, dfs(i, m) + dfs(m + 1, j));// 可以合并成一堆,计算合并成一堆的成本if ((j - i) % (k - 1) == 0)res += s[j + 1] - s[i];return memo[i][j] = res;}
}

http://www.dtcms.com/a/590645.html

相关文章:

  • 大型新型网站网页设计公司简介代码
  • 食品营销型网站长沙网站建设0731
  • Docker 监控与日志:如何排查容器问题
  • 汽车网站建设价格wordpress主题添加一个自定义页面
  • 如何把网站推广出管庄地区网站建设
  • 事务已关闭无法提交(500 错误)
  • 人工智能训练师考试1.1.1
  • 自己做免费网站的视频搭建一个视频网站
  • php网站开发环境配置企业网站建设的基本标准
  • 建电子商务网站注意事项自己怎么做网站免费的
  • 咖啡店网站建设模版上海闵行区邮编
  • 湖南省建设银行网站6大连做网站比较好的公司
  • 三亚做网站多少钱一平方网站建设项目推文
  • 一键安装Claude Code脚本
  • 太平洋保险网站域名建设网站
  • 分类信息网站建设模板wordpress 显示小工具栏
  • 网站不备案做seo没用网站顶部怎么做新浪链接
  • 平台类网站建设胡方案明细wordpress 文章 插件
  • C语言算法入门:从生活到编程的思维转变
  • 硅基计划6.0 JavaEE 肆 网络网络编程
  • 南宁网站建设建站系统wordpress仿微博发文插件
  • 邯郸推广网站建设哪个好济南网站免费制作
  • 在线制作图片热区搜索引擎优化的主题
  • 字符串贪心:字典序 回文 括号
  • 实现AI和BI整合的初步思路和探索
  • 徐州网站关键词各类手机网站建设
  • 做音乐网站赚钱吗中信云做网站
  • 兰州网站建设平台分析指数函数图像
  • 从零掌握U-Net数据集训练:原理到实战的完整指南
  • 石家庄行业网站建设阿里巴巴官网入口