LeetCode 1000. Minimum Cost to Merge Stones (区间 DP)
根据寒神题解 https://leetcode.com/problems/minimum-cost-to-merge-stones/discuss/247567/JavaC%2B%2BPython-DP
题意:
每次可以把连续 K 堆石头合成一堆,花费是 K 堆之和,问最小花费多少可以把全部石头合成 1 堆。不能做到的话,返回 -1。
题解:
因为,每次把 K 堆变成 1 堆,也就是说每次都减去 K-1 堆,最后剩下 1 堆,所以只有在 (n - 1) % (K - 1) == 0 才可以合成 1 堆。
dp[i][j] 表示 stones[i..j] 尽可能合并之后,花费的最小值。
然后枚举第i个石头和前几个石头合成了一堆。 只有长度为 1 + (K-1)*x 时才能合成一堆,所以枚举长度每次加 K - 1 。
class Solution {
public:
int mergeStones(vector<int>& stones, int K) {
int n = stones.size();
if ((n-1) % (K-1)) return -1;
vector<int> prefix(n + 1);
for (int i = 1; i <= n; i++) prefix[i] = prefix[i-1] + stones[i - 1];
vector<vector<int>> dp(n, vector<int>(n, 0));
// 当j-i < K 时不需要合并 所以值为 0
for (int l = K - 1; l < n; l++) {
for (int s = 0; s + l < n; s++) {
int e = s + l;
dp[s][e] = INT_MAX;
for (int m = s; m < e; m += K - 1) {
dp[s][e] = min(dp[s][e], dp[s][m] + dp[m + 1][e]);
}
// l % (K - 1) == 0 刚好可以合成一堆
// 因为枚举的是左边合成一堆,所以左右相加之后一定大于一堆,不是最简状态
// 所以需要再次合并 合并需要的值就是区间和
if (l % (K - 1) == 0) {
dp[s][e] += prefix[e + 1] - prefix[s];
}
}
}
return dp[0][n - 1];
}
};
LeetCode 1000. Minimum Cost to Merge Stones (区间 DP)的更多相关文章
- LeetCode 1000. Minimum Cost to Merge Stones
原题链接在这里:https://leetcode.com/problems/minimum-cost-to-merge-stones/ 题目: There are N piles of stones ...
- 1000. Minimum Cost to Merge Stones
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- [LeetCode] Minimum Cost to Merge Stones 混合石子的最小花费
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- [Swift]LeetCode1000. 合并石头的最低成本 | Minimum Cost to Merge Stones
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- 动态规划-Minimum Cost to Merge Stones
2019-07-07 15:48:46 问题描述: 问题求解: 最初看到这个问题的时候第一反应就是这个题目和打破气球的题目很类似. 但是我尝试了使用dp将问题直接转为直接合并到一个堆问题复杂度迅速提高 ...
- leetcode 746. Min Cost Climbing Stairs(easy understanding dp solution)
leetcode 746. Min Cost Climbing Stairs(easy understanding dp solution) On a staircase, the i-th step ...
- LeetCode 983. Minimum Cost For Tickets
原题链接在这里:https://leetcode.com/problems/minimum-cost-for-tickets/ 题目: In a country popular for train t ...
- LeetCode 1130. Minimum Cost Tree From Leaf Values
原题链接在这里:https://leetcode.com/problems/minimum-cost-tree-from-leaf-values/ 题目: Given an array arr of ...
- 2017北京网络赛 J Pangu and Stones 区间DP(石子归并)
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...
- leetcode 730. 统计不同回文子序列(区间dp,字符串)
题目链接 https://leetcode-cn.com/problems/count-different-palindromic-subsequences/ 题意 给定一个字符串,判断这个字符串中所 ...
随机推荐
- pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因是最近xlrd更新到了2.0.1版本,只支持.xls文件.所以pandas.read_excel('xxx.xlsx')会报错. 可以安装旧版xlrd,在cmd中运行: pip uninstall ...
- jwt redis,微信登陆知识复习 uniapp 请求封装,统一异常处理 相关, HutoolDemo工具介绍)
第三节 后台布局搭建,代码可以人工智能来写,但是环境初步搭建需要我们先建起来,所以以下记录快带搭建的过程, 思路: 后台首页的搭建 第一 用到了element--UI 自带的页面布局组件,它就 ...
- 移植自淘宝店家的,硬件SPI通讯3.5寸TFT,LCD屏幕。MSPM0G3507
适用MSPM0G3507 LP开发板 3.5寸TFTLCD屏,SPI通讯 项目是CCStheia的 特点:硬件SPI,速度更快,可以在syscfg中自行修改引脚 蓝奏云: https://wwo.la ...
- 2024年世界体育界的第一大丑闻:利昂内尔·梅西 (The biggest scandal in the world of sports in 2024: Unethical player - Lionel Messi.)
无德球员,梅西亲日辱华,不顾球迷感受,拒绝在中国的比赛中上场,并以所谓的伤病为借口,却在3天后的日本比赛中完全恢复如初,并进行了30分钟的高强度的对抗比赛并射门,可以说梅西的这一行径就是对中国亿万百姓 ...
- 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(7) —— Python版本实现的《2048》游戏的TDL算法
<2048>游戏在线试玩地址: https://play2048.co/ 如何解决<2048>游戏源于外网的一个讨论帖子,而这个帖子则是讨论如何解决该游戏的最早开始,可谓是&q ...
- Inno Setup 寻找 AppId 的方法
背景 有时候打包后,会遗失AppId.这样会导致下一次打包时没办法和之前统一.为了避免这个问题,所以最好是打包时记下来,可以根据注册表去查 解决办法 可以根据任意查找注册表的工具,我这里使用 Regi ...
- JMH:基准测试工具套件-应用
1.背景 多线程性能测试 JMH:简介 JMH is a Java harness for building, running, and analysing nano/micro/milli/macr ...
- 结合实例看 maven 传递依赖与优先级,难顶也得上丫
开心一刻 想买摩托车了,但是钱不够,想找老爸借点 我:老爸,我想买一辆摩托车,上下班也方便 老爸:你表哥上个月骑摩托车摔走了,你不知道?还要买摩托车? 我:对不起,我不买了 老板:就是啊,骑你表哥那辆 ...
- WhaleScheduler为银行业全信创环境打造统一调度管理平台解决方案
项目背景 数字金融是数字经济的重要支撑和驱动力.近年来,我国针对数字金融的发展政策频频出台,<金融科技发展规划 (2022-2025年)>.<"十四五"数字经济发 ...
- JavaFx加载本地工程图片报错
原因有两点: 1.png或者其他格式的图片文件没有放在src的直接目录下 2.路径填错,多了个符号等 正确姿势应该是 package com.fubao.tools.fx.Stage; import ...