leetcode:2463. 最小移动总距离【排序 + nmm复杂度 + 限制性dp】
目录
- 题目截图
- 题目分析
- 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】相关推荐
- 【题解】(排序) —— POJ 0810:距离排序
总时间限制: 1000ms 内存限制: 65536kB 描述 给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离. 输入 输入包括两 ...
- LeetCode高频题33. 搜索旋转排序数组
LeetCode高频题33. 搜索旋转排序数组 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...
- MySql中实现 按经纬度搜索附近的人,并按距离排序的简单实现
按经纬度搜索附近的人,并按距离排序的简单实现. 2016年05月31日 23:26:17 阅读数:7235 按经纬度搜索附近的人,并按距离排序的简单实现 这是一种简单的实现,数据量不大的情况下还是能满 ...
- php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
#1.两点距离(1.4142135623730951) select st_distance(point(0,0),point(1,1)); select st_distance(point (120 ...
- Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离
*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市.编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离 题目 题目描述与运行示例 破题 代 ...
- leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)
题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...
- LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)
文章目录 1. 题目 2. 解题 2.1 暴力超时解 2.2 排序+最长上升子序 463 / 3709,前 12.5% 1240 / 9290,前13.3% 1. 题目 给你 n 个长方体 cuboi ...
- LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...
- 【LeetCode】【HOT】148. 排序链表(归并排序)
[LeetCode][HOT]148. 排序链表 文章目录 [LeetCode][HOT]148. 排序链表 package hot;import java.util.Arrays;class Lis ...
最新文章
- The note of Developing Innovative Ideas for New Companies Course
- LeetCode实战:螺旋矩阵
- java b2b2c shop 多用户商城系统源码- eureka集群整合hystrix框架
- InnoDB和MyISAM有哪些不同
- Service Broker实现发布-订阅(Publish-Subscribe)框架
- MySQL增删改查基础知识
- 台积电预计5nm芯片四季度出货量将超过15万片晶圆,9成供应苹果
- java序列化与深度克隆
- C#解析HL7协议数据2.X
- mac 修改vmware的NAT网关
- ISO27001信息安全管理体系认证范围及用处
- java直播在线人数怎么做_添加抖音直播间在线人数怎么做
- 利用CCS6.1 对MSP432 做factory reset
- 给WordPress加个评论关闭时间提示
- 网页炫酷特效拿来即可用(看板娘鼠标点击炫酷登录页面樱花特效生日祝福彩虹屁)
- Excel中ISEVEN函数用法之判断数值奇偶性
- JAVA宠物医院管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
- Shodan搜索引擎使用技巧
- 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
- tomcat配置用户权限
热门文章
- 属于db模式缺点的是什么_浅析工程总承包发包模式的投资控制思路(三)
- php视频观看20秒设置,实现视频定秒试看功能,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
- 重新组织数据之十二 :Replace Record with Data Class(以数据类取代记录)
- 内存或磁盘空间不足 excel 无法再次打开或保存
- 擦亮双眼,走出精明网贷投资的第一步
- 基本RS触发器(SR锁存器)
- 国家电网通信类笔试资料
- 微信授权-官方案例 ios版
- 考研倒计时小系统(前后端交互)
- 技术人员也要注重提升软实力