目录

  • 题目截图
  • 题目分析
  • ac code
  • 总结

题目截图


题目分析

  • robot和factory排序,可以证明按顺序取连续的距离最少的
  • f[i][j]表示前i个工厂取前j个机器人的最少距离,可以两边都添加0项
  • 假设第i个工厂维修了k个机器人, k 必须在[0, min(j, limit[i])]中
  • f[i][j] = min(f[i - 1][j - k] + sum(abs(robot[p] - position[i])))
  • 后面的求和可以累加起来计算
  • 注意, ij遍历后,f[i][j]先继承一下f[i - 1][j]的值
  • 后面再进行cost的累加,以及f[i][j]的更新

ac code

class Solution:def minimumTotalDistance(self, robot: List[int], factory: List[List[int]]) -> int:# 用邻项交换法可以证明# 对机器人和工厂按照位置从小到大排# 那么每个工厂修复的机器人就是连续的一段了# f[i][j]表示前i个工厂修理前j个机器人的最小距离robot.sort()factory.sort(key = lambda it: it[0])m, n = len(factory), len(robot)# 假设第i个工厂维修了k个机器人# k in [0, min(j, limit(i)) + 1]# p in [j - k, j] (total: k)# f[i][j] = min(f[i - 1][j - k] + sum(abs(robot[p] - position[i])))f = [[inf] * (n + 1) for _ in range(m + 1)]# 维修0个机器人的距离都是0for i in range(m + 1):f[i][0] = 0# 逐层下推for i in range(1, m + 1):for j in range(1, n + 1):cost = 0# 这个不选的话,继承上一个的值f[i][j] = f[i - 1][j]for k in range(1, min(j, factory[i - 1][1]) + 1):cost += abs(robot[j - k] - factory[i - 1][0])f[i][j] = min(f[i][j], f[i - 1][j - k] + cost)#print(f)return f[-1][-1]# factory.sort(key=lambda f: f[0])# robot.sort()# m = len(robot)# f = [0] + [inf] * m# for pos, limit in factory:#     print(f)#     for j in range(m, 0, -1):#         cost = 0#         for k in range(1, min(j, limit) + 1):#             cost += abs(robot[j - k] - pos)#             f[j] = min(f[j], f[j - k] + cost)# print(f)# return f[m]

总结

排序 + dp + 困难dp

leetcode:2463. 最小移动总距离【排序 + nmm复杂度 + 限制性dp】相关推荐

  1. 【题解】(排序) —— POJ 0810:距离排序

    总时间限制: 1000ms 内存限制: 65536kB 描述 给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离. 输入 输入包括两 ...

  2. LeetCode高频题33. 搜索旋转排序数组

    LeetCode高频题33. 搜索旋转排序数组 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...

  3. MySql中实现 按经纬度搜索附近的人,并按距离排序的简单实现

    按经纬度搜索附近的人,并按距离排序的简单实现. 2016年05月31日 23:26:17 阅读数:7235 按经纬度搜索附近的人,并按距离排序的简单实现 这是一种简单的实现,数据量不大的情况下还是能满 ...

  4. php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序

    #1.两点距离(1.4142135623730951) select st_distance(point(0,0),point(1,1)); select st_distance(point (120 ...

  5. Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离

    *8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市.编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离 题目 题目描述与运行示例 破题 代 ...

  6. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  7. LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)

    文章目录 1. 题目 2. 解题 2.1 暴力超时解 2.2 排序+最长上升子序 463 / 3709,前 12.5% 1240 / 9290,前13.3% 1. 题目 给你 n 个长方体 cuboi ...

  8. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...

  9. 【LeetCode】【HOT】148. 排序链表(归并排序)

    [LeetCode][HOT]148. 排序链表 文章目录 [LeetCode][HOT]148. 排序链表 package hot;import java.util.Arrays;class Lis ...

最新文章

  1. The note of Developing Innovative Ideas for New Companies Course
  2. LeetCode实战:螺旋矩阵
  3. java b2b2c shop 多用户商城系统源码- eureka集群整合hystrix框架
  4. InnoDB和MyISAM有哪些不同
  5. Service Broker实现发布-订阅(Publish-Subscribe)框架
  6. MySQL增删改查基础知识
  7. 台积电预计5nm芯片四季度出货量将超过15万片晶圆,9成供应苹果
  8. java序列化与深度克隆
  9. C#解析HL7协议数据2.X
  10. mac 修改vmware的NAT网关
  11. ISO27001信息安全管理体系认证范围及用处
  12. java直播在线人数怎么做_添加抖音直播间在线人数怎么做
  13. 利用CCS6.1 对MSP432 做factory reset
  14. 给WordPress加个评论关闭时间提示
  15. 网页炫酷特效拿来即可用(看板娘鼠标点击炫酷登录页面樱花特效生日祝福彩虹屁)
  16. Excel中ISEVEN函数用法之判断数值奇偶性
  17. JAVA宠物医院管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  18. Shodan搜索引擎使用技巧
  19. 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
  20. tomcat配置用户权限

热门文章

  1. 属于db模式缺点的是什么_浅析工程总承包发包模式的投资控制思路(三)
  2. php视频观看20秒设置,实现视频定秒试看功能,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  3. 重新组织数据之十二 :Replace Record with Data Class(以数据类取代记录)
  4. 内存或磁盘空间不足 excel 无法再次打开或保存
  5. 擦亮双眼,走出精明网贷投资的第一步
  6. 基本RS触发器(SR锁存器)
  7. 国家电网通信类笔试资料
  8. 微信授权-官方案例 ios版
  9. 考研倒计时小系统(前后端交互)
  10. 技术人员也要注重提升软实力