题目:原题链接(困难)

标签:动态规划

解法 时间复杂度 空间复杂度 执行用时
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)相关推荐

  1. LeetCode 1000. 合并石头的最低成本(经典区间DP)

    1000. 合并石头的最低成本 定义dp[i][j]为尽可能多的合并区间[i, j] 所需的成本,不一定能合并成一堆,但合并完成后剩下的堆数一定小于k,更具体地,剩余的堆数一定是(n - 1) % ( ...

  2. LeetCode 1000. 合并石头的最低成本(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆 ...

  3. 【LeetCode】合并石头的最低成本 [H](动态规划)

    1000. 合并石头的最低成本 - 力扣(LeetCode) 一.题目 有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而 ...

  4. 2021-08-24:合并石头的最低成本。有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的

    2021-08-24:合并石头的最低成本.有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头.每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的 ...

  5. LeetCode题解(0857):雇佣K名工人的最低成本(Python)

    题目:原题链接(困难) 标签:堆.贪心算法 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(NlogN)O(NlogN)O(NlogN) O(N)O(N)O(N) 280ms ...

  6. LeetCode题解-23 合并K个排序链表 Hard

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2 ...

  7. LeetCode题解(0606):根据二叉树创建字符串(Python)

    题目:原题链接(简单) 标签:字符串.树.二叉树 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 48ms (100.00%) ...

  8. LeetCode题解(0695):岛屿的最大面积(Python)

    题目:原题链接(中等) 标签:数组.广度优先搜索.深度优先搜索 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N×M)O(N×M)O(N×M) O(N×M)O(N×M)O( ...

  9. LeetCode题解(0592):分数加减运算(Python)

    题目:原题链接(中等) 标签:数学.字符串 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 40ms (67.37%) Ans ...

最新文章

  1. 【组队学习】【27期】李宏毅机器学习
  2. arcgis python 新建图层组_分享Arcgis中62个常用技巧系列一(前20个技巧)
  3. html优化网站的方法,利用HTML优化加快网页速度方法介绍
  4. Spring Boot开始
  5. linq语句复杂查询和分开查询的性能对比
  6. 猪流感来了,我们做好准备了吗
  7. 收集服务器配置资源信息
  8. 支持Linux系统恢复工具,12款Linux系统恢复工具
  9. 51单片机 模块化编程
  10. 诺顿5月17日病毒库误报,导致系统文件被删除
  11. 最适合使用外汇跟单软件的人
  12. 怎样在WORD里输入国际音标
  13. 如何正确选择飞秒激光手术医…
  14. 网约护士来了?相关App不合规 两大安全问题最受关注
  15. 网上打印怎么那么便宜,网上打印平台哪家比较便宜
  16. latex编辑器的选择、texlive的安装及学位模板的使用
  17. 如何用计算机给闺蜜表白,闺蜜情话最暖心短句50句
  18. python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
  19. bzoj3055 礼物运送(Floyd+状压dp)
  20. 【物联网(IoT)开发】Arduino IDE的工具开发板菜单中找到我的开发板型号怎么办?

热门文章

  1. java获取项目绝对路径_如何获取项目绝对路径?
  2. lambda表达式与匿名函数
  3. 2022手机号码JS正则表达式验证实例代码
  4. jquery实现ajax异步请求
  5. hashmap的扩容机制,这些年我所经历的所有面试,工作感悟
  6. 五、RTMP协议 RTMP播放基本流程
  7. html 计算平均值,算术平均值怎么算
  8. ETC和OBU和CPC的说明
  9. git everything up-to-date解决方法
  10. oppor15x支持html吗,oppor15x和oppor15有什区别 从设计和配置方面对比