LeetCode题解(1000):合并石头的最低成本(Python)
题目:原题链接(困难)
标签:动态规划
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N 4 ) O(N^4) O(N4) | O ( N 3 ) O(N^3) O(N3) | 156ms (21.59%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
MAX_INT = 30 * 30 * 100 + 1class Solution:def mergeStones(self, stones: List[int], k: int) -> int:size = len(stones)# 处理无法完成的情况if (size - 1) % (k - 1) != 0:return -1# 计算前缀和prefix = [0]for i in range(size):prefix.append(stones[i] + prefix[-1])# 步骤总数total_step = (size - 1) // (k - 1)# print("步骤总数:", total_step)# 定义状态表格:dp[i][j][k] = 将区间[i,j]缩k堆需要的最低成本dp = [[[MAX_INT] * (size + 1) for _ in range(size)] for _ in range(size)]# 初始化状态矩阵for i in range(size):for j in range(i, size):dp[i][j][j - i + 1] = 0# print(i, j, j - i + 1, ":", dp[i][j][j - i + 1])for i in range(size - k + 1):j = i + k - 1dp[i][j][1] = prefix[j + 1] - prefix[i]# print(i, j, 1, ":", dp[i][j][1])# 状态转移方程:# dp[i][j][1] = dp[i][j][k] + sum(i,j)# dp[i][j][k] = min{dp[i][p][1] + dp[p+1][j][k-1] + sum(i,j)} i<p<jfor length in range(k + 1, size + 1):# for step in range(2, total_step + 1):# length = 1 + step * (k - 1)# print("当前长度", ":", length)for i in range(size - length + 1):j = i + length - 1for m in range(2,k+1):for p in range(i, j):dp[i][j][m] = min(dp[i][j][m], dp[i][p][1] + dp[p + 1][j][m - 1])# print(i, j, m, ":", dp[i][j][m])dp[i][j][1] = dp[i][j][k] + prefix[j + 1] - prefix[i]# print(i, j, 1, ":", dp[i][j][1])return dp[0][size - 1][1]
LeetCode题解(1000):合并石头的最低成本(Python)相关推荐
- LeetCode 1000. 合并石头的最低成本(经典区间DP)
1000. 合并石头的最低成本 定义dp[i][j]为尽可能多的合并区间[i, j] 所需的成本,不一定能合并成一堆,但合并完成后剩下的堆数一定小于k,更具体地,剩余的堆数一定是(n - 1) % ( ...
- LeetCode 1000. 合并石头的最低成本(区间DP)
文章目录 1. 题目 2. 解题 1. 题目 有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆 ...
- 【LeetCode】合并石头的最低成本 [H](动态规划)
1000. 合并石头的最低成本 - 力扣(LeetCode) 一.题目 有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而 ...
- 2021-08-24:合并石头的最低成本。有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的
2021-08-24:合并石头的最低成本.有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头.每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的 ...
- LeetCode题解(0857):雇佣K名工人的最低成本(Python)
题目:原题链接(困难) 标签:堆.贪心算法 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(NlogN)O(NlogN)O(NlogN) O(N)O(N)O(N) 280ms ...
- LeetCode题解-23 合并K个排序链表 Hard
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2 ...
- LeetCode题解(0606):根据二叉树创建字符串(Python)
题目:原题链接(简单) 标签:字符串.树.二叉树 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 48ms (100.00%) ...
- LeetCode题解(0695):岛屿的最大面积(Python)
题目:原题链接(中等) 标签:数组.广度优先搜索.深度优先搜索 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N×M)O(N×M)O(N×M) O(N×M)O(N×M)O( ...
- LeetCode题解(0592):分数加减运算(Python)
题目:原题链接(中等) 标签:数学.字符串 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 40ms (67.37%) Ans ...
最新文章
- 【组队学习】【27期】李宏毅机器学习
- arcgis python 新建图层组_分享Arcgis中62个常用技巧系列一(前20个技巧)
- html优化网站的方法,利用HTML优化加快网页速度方法介绍
- Spring Boot开始
- linq语句复杂查询和分开查询的性能对比
- 猪流感来了,我们做好准备了吗
- 收集服务器配置资源信息
- 支持Linux系统恢复工具,12款Linux系统恢复工具
- 51单片机 模块化编程
- 诺顿5月17日病毒库误报,导致系统文件被删除
- 最适合使用外汇跟单软件的人
- 怎样在WORD里输入国际音标
- 如何正确选择飞秒激光手术医…
- 网约护士来了?相关App不合规 两大安全问题最受关注
- 网上打印怎么那么便宜,网上打印平台哪家比较便宜
- latex编辑器的选择、texlive的安装及学位模板的使用
- 如何用计算机给闺蜜表白,闺蜜情话最暖心短句50句
- python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
- bzoj3055 礼物运送(Floyd+状压dp)
- 【物联网(IoT)开发】Arduino IDE的工具开发板菜单中找到我的开发板型号怎么办?