美文网首页生物信息学与算法
动态规划算法练习 (3)

动态规划算法练习 (3)

作者: 生信编程日常 | 来源:发表于2020-05-05 16:15 被阅读0次
1. 按摩师 (https://leetcode-cn.com/problems/the-masseuse-lcci)

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。

这个题目明显就是以前提到的打家劫舍的小偷问题,只不过小偷改行按摩师了。同样是第i次的结果取决于i-1次和i-2次,即dp[i] = max(dp[i-1], dp[i-2] + i)

def massage(nums):
    last = 0
    now = 0
    for i in nums:
        now, last = max(last + i, now), now
    return now
2.不同路径 (https://leetcode-cn.com/problems/unique-paths/)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?



例如,上图是一个7 x 3 的网格。有多少可能的路径?

根据题目,可以知道当网格为1 x N或者N x 1的时候,路径都是一种。到这里,其实能感受出来,这个题目简直就是全局比对算法中的分数矩阵计算简化版,除了这个题目不能斜着走并且没有计算分数大小。
其中到第 i 行 j 列的格子的方法数,肯定是从左侧的格子和上边的格子而来,也就是第 i - 1行 j 列的方法数与第 i 行 j - 1 列的方法数的和。即dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。

def uniquePaths(m, n):
    dp = [[0 for x in range(m)] for y in range(n)]
    for x in range(n):
        dp[x][0] = 1
    for y in range(m):
        dp[0][y] = 1

    for i in range(1, n):
        for j in range(1, m):
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
    
    return dp[-1][-1]

相关文章

  • 动态规划算法练习 (3)

    1. 按摩师 (https://leetcode-cn.com/problems/the-masseuse-lcc...

  • 背包问题

    介绍 学习动态规划算法的经典例题。动态规划算法一般有3个特征1、最优化原理:最优解所包含的子问题的解也是最优的。2...

  • 动态规划算法练习 (1)

    动态规划(英语:Dynamic programming,简称DP)是一种在数学、计算机科学、经济学和生物信息学中使...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 动态规划算法

    动态规划算法 最长上升子序列

  • 维特比算法

    维特比(Viterbi)算法是一种动态规划算法,在处理隐马尔可夫(HMM)最优路径问题时经常被使用. 动态规划算法...

  • 动态规划 - 凸多边形的最优三角剖分问题

    动态规划 动态规划的核心概念有以下3点: 最优子结构 问题的边界 状态转移公式 设计动态规划算法的基本步骤: 找出...

  • 最短路径解决方法

    Floyd算法;Dijkstra算法;Bellman-Ford算法;动态规划算法

  • 动态规划算法(01背包问题)

    一. 动态规划算法介绍: 动态规划算法和分治算法类似,也是将待求解问题分成若干个小问题一步步求解,不同的是,每一个...

  • 常用算法(3)-动态规划算法

    1.介绍 动态规划(Dynamic Programming) 算法的核心思想, 将大问题划分为小问题进行解决,从而...

网友评论

    本文标题:动态规划算法练习 (3)

    本文链接:https://www.haomeiwen.com/subject/pcqmghtx.html