826,一个n * m矩阵代表一个电脑的阵列,给你一个list< Point >代表坏掉的电脑坐标。现在我们从(0,0)出发修电脑,要求:
  1.必须修完当前行所有坏掉的电脑才能走向下一行。
  2.如果要走向下一行,修理工必须先返回到这一行的最左端或者最右端。
  求最短的访问距离。
 
  输入的矩阵大小为 n x m ,n <= 200,m <= 200。
  坏掉的机器 num <= 1000。
  修完最后一台电脑后,也需要返回最后一行的最左端或最右端。
# example:
# Input:
# n = 3
# m = 10
# list = [[0,0],[0,9],[1,7]]
# Output: 15
# Explanation:
# Starting from (0,0), fix 0, then go to (0,9) to fix 1 and go from (0,9) to next line (1,9), then go to (1,7) to fix 3, then go back to (1,9) and go to (2,9).
 
 # 一个n * m矩阵代表一个电脑的阵列,给你一个list< Point >代表坏掉的电脑坐标。现在我们从(0,0)出发修电脑,要求:
# 1.必须修完当前行所有坏掉的电脑才能走向下一行。
# 2.如果要走向下一行,修理工必须先返回到这一行的最左端或者最右端。
# 求最短的访问距离。
#
# 输入的矩阵大小为 n x m ,n <= 200,m <= 200。
# 坏掉的机器 num <= 1000。
# 修完最后一台电脑后,也需要返回最后一行的最左端或最右端。 # example:
# Input:
# n = 3
# m = 10
# list = [[0,0],[0,9],[1,7]]
# Output: 15
# Explanation:
# Starting from (0,0), fix 0, then go to (0,9) to fix 1 and go from (0,9) to next line (1,9), then go to (1,7) to fix 3, then go back to (1,9) and go to (2,9). class Solution:
"""
@param n: 行
@param m: 列
@param badcomputers: 坏电脑
@return: 答案
""" def maintenance(self, n, m, badcomputers):
dp = [[0, 0] for i in range(n)] # 每一行作为一个子问题,用该数组存储该行的左边解和右边解的步数
matrix = [[0 for i in range(m)] for j in range(n)] # 初始化一个n*m的元素为0的矩阵
# 坏电脑矩阵元素设为1
for node in badcomputers:
matrix[node[0]][node[1]] = 1
for i in range(n):
right = -1 # 右边距
left = -1 # 左边距
for j in range(m):
if matrix[i][j] != 0:
right = j # max(most_right, j)
left = max(left, m - 1 - j)
if i == 0:
if right == -1:
dp[0][0] = 0
dp[0][1] = m - 1
else:
dp[0][0] = 2 * right
dp[0][1] = m - 1
continue
if right == -1: # 如果该行没有坏电脑,直接进入下一行
dp[i][0] = dp[i - 1][0] + 1
dp[i][1] = dp[i - 1][1] + 1
else: # 取当前行相对上一行的最优解
dp[i][0] = min(dp[i - 1][0] + 2 * right,
dp[i - 1][1] + m - 1) + 1
dp[i][1] = min(dp[i - 1][1] + 2 * left,
dp[i - 1][0] + m - 1) + 1
return min(dp[n - 1][0], dp[n - 1][1]) if __name__ == '__main__':
# n = 3
# m = 10
# list = [[0, 0], [0, 9], [1, 7]]
n = 3
m = 10
list = [[0, 3], [1, 7], [1, 2]]
solution = Solution()
res = solution.maintenance(n, m, list)
print(res)

826.py

lintcode 826电脑维修的更多相关文章

  1. iOS----------Mac维修预约-如何找到电脑维修单

    先打开苹果官网,找到技术支持 2.选择维修选项 3.查看维修状态 4.显示维修时间订单

  2. 上海苹果维修点分享苹果电脑MACBOOK故障维修常见案例

    苹果的电子设备无论是外观和性能都是无与伦比的美丽,很多开发者都开始选用苹果电脑macbook.近年来苹果售后维修点来维修苹果电脑的用户也越来越多,我们上海苹果维修点就整理分享了一些苹果电脑MACBOO ...

  3. 原装win8系统电脑崩溃问题解决

    原装win8系统电脑崩溃问题解决 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:之所以撰写本篇关于win8原装系统电脑崩溃的博文,一是要吐槽一下原装w ...

  4. 我的MacbookPro进水了!维修过程记录

    电脑进水与解决方案 如果事情有变坏的可能,不管这种可能性有多小,它总会发生.---墨菲定律 进水过程 2020年03月21日日下午3点左右,不小心把水杯碰倒了,水通过电脑右侧的键盘处进入了大概有10毫 ...

  5. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  6. 并查集 poj2236

    网址:http://poj.org/problem?id=2236 题意:有n台坏的电脑,如果每两台电脑的距离不能超过d,那么这两台电脑有联系,用字符串O 表示标记第x台电脑维修了,用S判断从X到y是 ...

  7. SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  8. SQL Server 2008 R2——ROW_NUMBER() 去掉不同行中相同列的重复内容

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  9. 较全的IT方面帮助文档

    http://www.shouce.ren/post/d/id/108632 XSLT参考手册-新.CHMhttp://www.shouce.ren/post/d/id/108633 XSL-FO参考 ...

随机推荐

  1. 中阶d03 JDBC 使用

    1.首先在数据库中创建表 2.安装mysql驱动 java开发环境中导入jdbc连接mysql的jar包 mysql-connector-java-5.1.7-bin.jar 下载地址:https:/ ...

  2. Array(数组)对象-->indexOf() 方法

    1.定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,即下标. 如果没有找到匹配的字符串则返回 -1. 语法: string.indexOf(searchvalue ...

  3. mysql--> find your databases' local position

    1. find file:  "my.ini" 2.Using ctrl+F  find string "datadir" then you can see y ...

  4. Struts2-学习笔记系列(8)-异常处理

    后台抛出自定义异常 public String execute() throws Exception { if (getUser().equalsIgnoreCase("user" ...

  5. 记一次pgsql中查询优化(子查询)

    记一次pgsql的查询优化 前言 这是一个子查询的场景,对于这个查询我们不能避免子查询,下面是我一次具体的优化过程. 优化策略 1.拆分子查询,将需要的数据提前在cte中查询出来 2.连表查询,直接去 ...

  6. 国外的一个代码 仓库 github --- 里面类似一个svn 的代码仓库

    https://github.com/wzhanke/shell 用户:wzh.e 邮箱:wzh.e@x.com 登陆密码:*wzh.e8*9

  7. Java的多线程编程模型5--从AtomicInteger开始

    Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicIn ...

  8. 【Android】EventReminder使用教程(日历事件导出封装库)

    碎碎念 为啥要写这个库呢? 尝试自己写一个库调用,学习一下这个流程,为以后做准备 日历库在网上的资料太少了,而这个功能却又很实用 自己做的项目都会涉及到事件导出功能,不想重复写代码 使用方法 引入 在 ...

  9. Python处理HTTP返回包遇到问题总结TypeError、keyError、SyntaxError、AttributeError

    处理HTTP返回包包括对关键参数的校验,参数完整性检验,获取返回包参数的方法,返回包数据去重方法 在执行时遇到不少问题,部分问题记录如下: 1.报错信息:“TypeError: list indice ...

  10. 【题解】P2024 [NOI2001]食物链 - 数据结构 - 并查集

    P2024 [NOI2001]食物链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 动物王国中有三类动物 \(A,B ...