1.3 ACM之路-动态规划
文章平均质量分 51
Bryce1010_贤哉回也
github: https://github.com/Bryce1010
\n
e-mail: bryceyx@gmail.com
展开
-
【Leetcode】(动态规划)最长公共子序列总结(路径压缩)
题目给定两个字符串str1和str2,返回两个字符串的最长公共子序列。分析这种题目是最经典的动态规划题目,下面简单介绍做法。首先根据题目设dp[i][j]表示str1[0…i]和str2[0…j]的子串最长公共子序列的长度为dp[i][j]那么有三种转换情况:dp[i-1][j] 如果str1[i]≠str2[j],dp[i][j]=dp[i-1][j]dp[i][j-1] 如果str1[i]≠str2[j],dp[i][j]=dp[i-1][j]dp[i-1][j-1] 如果str1[i原创 2021-01-07 11:11:51 · 438 阅读 · 0 评论 -
【Leetcode】(动态规划) 汉诺塔问题,求到达中间的状态的最优步数
汉诺塔问题:汉诺塔问题根据汉诺塔问题-维基百科的描述,是一个将左边的圆盘挪到右边任务。需要满足的条件是,每次只能移动一个圆盘,而且大盘不能再小盘上面。题目初始问题:给定一个数组arr, arr[i]表示第i个盘当前在第arr[i]柱子上,求从汉诺塔初始状态到这个arr数组的状态最优情况下需要多少步,如果不存在则返回-1.进阶问题:采用时间复杂度为O(n),空间复杂度O(1)实现上面的问题。例子arr = { 1,1} 返回0arr = { 2,1} 返回1arr= { 2,2 } 返回-原创 2020-12-18 21:55:22 · 1082 阅读 · 3 评论 -
【Leetcode】最长递增子序列(动态规划 + 二分搜索)
题目给定数组arr,返回arr的最长递增子序列举例:arr = [2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9]要求:如果arr的长度为N,请实现时间复杂度为O(nlogn)的方法。分析这一题也是经典的动态规划,那么常规的动态规划时间复杂度为O(n^2);如果加入二分的话,可以将动态规划优化到O(nlogn)。解法1 O(n^2)的动态规划了解题目以后,状态为数组的当前位置i就能决定返回值,那么dp[i]表示arr[0…i]的最长递增子序列dp[i] =原创 2020-12-06 14:14:48 · 6539 阅读 · 1 评论 -
【Leetcode】打气球的最大分数 (暴力递归+动态规划)
题目给定一个数组arr,代表一排有分数的气球。没打爆一个气球都能获得分数,假设打爆气球的分数为X,获得分数的规则如下:如果被打爆气球的左边有没有被打爆的气球,找到离被打爆气球最近的气球,假设分数为L;如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设位数为R,那么获得分数为LRX。如果被打爆气球的左边有没有被打爆的气球,找到离被打爆气球最近的气球,假设分数为L;右边没有没被打爆的气球,那么获得分为为L*R。如果被打爆气球左边没有没被打爆的气球,如果被打爆气球的右边有没被打爆的气原创 2020-12-05 19:26:38 · 816 阅读 · 0 评论 -
【Leetcode】机器人到达指定位置方法数 (动态规划)
Foreword原版是 https://www.notion.so/bryce1010/2b4b9e98bb34422084d3cf3f84534df3,原版查看体验更佳。Resources《程序员代码面试指南》《OI wiki dp部分》《labuladong动态规划详解》题目假设有排成一行的N个位置,记为1~N,N一定大于等于2.开始时机器人在其中的M位置上,机器人可以往左走,也可以往右走,如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到原创 2020-12-01 17:00:45 · 945 阅读 · 0 评论 -
2018 Multi-University Training Contest 5 HDU - 6357 Hills And Valleys
bryce1010模板题意: 求最长不下降子序列,支持一次翻转区间操作。 思路: 将数组b设为0-9的子序列,那么a和b的最长上升子序列就是a的最长不下降子序列。 对于翻转区间操作,可以转换为对b序列的翻转操作,这样就只有C(10,2)中选择。 如果不太明白可以看下面这句摘抄的话。它把最长不下降子序列映射成两个序列的最长公共子序列问题 a序列就是给出的原序列 b序列是值域的序...原创 2018-08-07 15:55:55 · 179 阅读 · 0 评论 -
51nod 1118 机器人走方格
1118 机器人走方格基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。Input第1行,2个数M,N,中间用空格隔开。(2原创 2017-10-22 23:38:56 · 279 阅读 · 0 评论 -
51nod 1134最长递增子序列
1134 最长递增子序列基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1原创 2017-10-20 17:17:48 · 354 阅读 · 0 评论 -
最长上升子序列的两种解法
问题描述一个数的序列bi,当b1 你的任务,就是对于给定的序列,求出最长上升子序列的长度。动态规划法如何把这个问题分解成子问题呢?经过分析,发现 “求以ak(k=1, 2, 3…N)为终点的最长上升子序列的长度”是个好的子问题――这里把一个上升子序列中最右边的那个数,称为该子序列的“终点”。虽然这个子问题和原问题形式上并不完全一样,但是只要这N个子问题都解决了,那么这N原创 2017-10-20 17:12:22 · 1685 阅读 · 0 评论