动态规划
文章平均质量分 86
仁者乐山智者乐水
这个作者很懒,什么都没留下…
展开
-
leetcode877. 石子游戏(动态规划实现)
文章目录石子游戏解题思路状态方程初始化返回值代码实现石子游戏亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回 true ,当李赢得比赛时返回 false 。示例:输入:[5,原创 2021-06-16 23:57:25 · 359 阅读 · 0 评论 -
力扣1787题:使所有区间的异或结果为零-动态规划
文章目录一、题目描述二、解题思路1. 定义状态2. 定义状态转移方程3. 初始化4. 计算方式三、代码实现四、优化一、题目描述 给你一个整数数组 nums 和一个整数 k 。区间 [left, right](left <= right)的异或结果是对下标位于 left 和 right(包括 left 和 right )之间所有元素进行 XOR 运算的结果:nums[left] XOR nums[left+1] XOR … XOR nums[right] 。返回数组中要更改的最小元素数 ,以使原创 2021-05-26 22:25:19 · 364 阅读 · 0 评论 -
动态规划经典题目-最小权三角剖分
一、题目描述设A是顶点为1,2,…,n的凸多边形,可以用不在内部相交的n-3条对角线将A划分成三角形,如下图就是5边形的所有的划分方案.假设凸n边形的边及对角线的长度dij,都是给定的正整数,1≤i<j≤n.划分后三角形k的权值等于其周长,求具有最小权值的划分方案.设计一个动态规划算法求解这个问题,说明算法的时间复杂度.示例1:输入:d = [ [0,2,3,1,5,6], [2,0,3,4,8,6], [3,3,0,10,13,7], [1,4,10,0,12,原创 2021-05-24 23:52:25 · 2177 阅读 · 0 评论 -
leetcode664题:奇怪的打印机-动态规划
一、题目描述有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/strange-printer示例1:输入:s = "aaabbb"输出:2解释:首先打印 "aaa" 然后打印 "bbb"。示例2:输入原创 2021-05-24 22:31:01 · 530 阅读 · 1 评论 -
动态规划经典题目-数据压缩之图像压缩
一、题目描述 计算机中的图像由一系列像点构成,每个像点称为一个像素,图像分辨率越高,使用的像素就越多,例如Windows桌面的图片经常使用的设置是1024×768个,大概达到106量级.图像传输和视频处理有时在1秒钟内要处理几十帧图片,这些图片的像素就很可观了,因此图像处理常常需要大量的存储空间和高的处理速度,图像压缩问题就成了计算机科学技术中的重要研究课题之一. 以黑白图像的处理来说明图像压缩中的问题.每幅黑白图像由像点构成,每个像点具有灰度值,用0~255之间的整数表示.如果每个整数都用相同原创 2021-05-23 22:09:06 · 2853 阅读 · 1 评论 -
动态规划经典题目-数据压缩之文本压缩
一、题目描述 考虑如下数据压缩技术。我们有一个表存了m个文本串,每个长度至多为k。我们想对一个长为n的数据串D使用尽可能少的文本串来编码。例如,如果我们的表包含(“a”,“ba”,“abab", “b"), 且数据串为“bababbaababa" ,编码的最好方式是(“b”,“abab”, “ba” ,“abab”,“a”)一共计5个码字. 给出一个O(nmk)算法找出最优编码的码长。你可以假设每个文本串都可以基于该表至少给出一个编码。示例:输入:codes = ["a","ba","abab",原创 2021-05-23 21:31:47 · 644 阅读 · 0 评论 -
动态规划经典题目-矩阵链乘法
一、题目描述 给定n个矩阵{A1,A2,A3,…,An},其中,Ai和Ai+1(i=1,2,…,n-1)是可乘的。用括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同,找出一种加括号的方法,使得矩阵连乘的计算量最小。 设两个矩阵Mixj、Mjxp相乘运算次数则为i x j x p。示例: A1是M5x10的矩阵; A2是M5x100的矩阵; A3是M100x2的矩阵; 那么有两种加括号的方法: (1) (A1A2)A3; (2) A1(A2原创 2021-05-23 20:59:03 · 964 阅读 · 0 评论 -
动态规划经典题目-字符串切分
一、题目描述 某种字符串处理语言允许程序员将字符串分为两段。将一个长为n的字符串分为两段耗时n个单位,因为这种操作会涉及旧字符串的复制工作。一个程序员想将字符串分为若干段,他所采用的划分次序会影响到总的用时情况。例如,假设我们想将一个有20个字符的字符串在第3个、第8个和第10个位置之后切断。如果我们按从左到右的次序切分,那么第一次切分耗时20个单位,第二次切分耗时17个单位,第三次切分耗时12个单位,共计49步。如果我们按从右到左的次序切分,那么第一次切分耗时20个单位,第二次切分耗时10个单位,第原创 2021-05-23 18:22:00 · 1038 阅读 · 0 评论 -
动态规划经典题目-字符串的编辑距离
一、题目描述 编辑距离(edit distance)— 我们把两个字符串的相似度定义为:将一个字符串转换成另外一个字符串时需要付出的代价。转换可以采用插入、删除和替换三种编辑方式,因此转换的代价就是对字符串的编辑次数。而编辑距离就是从一个字符串到另一个字符串的最少编辑次数。示例:以字符串“SNOWY”和“SUNNY”为例,下面是两种将“SNOWY”转换为“SUNNY”的方法转换方法1:S - N O W YS原创 2021-05-23 12:21:05 · 915 阅读 · 2 评论 -
动态规划经典题目-最长单调递增子序列
一、题目描述 最大单调子序列(Maximum Monotone Subsequence )-如果一个数列中第i个元素最少也和第i - 1个元素一样大,那么该序列单调递增。求一个字符串的最大单调递增子序列。示例:输入:s = "subsequence" 输出:beee二、解题思路1. 定义状态 设dp[i]表示字符串s的前i个字符的最大单调递增子序列的长度。2. 定义状态转移方程当s[i] >= s[k]时,有dp[i]=max(dp[k])+1dp[i] = max(dp原创 2021-05-23 11:16:35 · 958 阅读 · 0 评论 -
动态规划经典题目-最长公共子串
一、题目描述 求两个字符串s1和s2的最长公共子串。示例:输入:s1 = "photograph" s2 = "tomography"输出:ograph二、解题思路 其实本题就是字符串编辑距离的变种,字符串编辑距离会了,此题就会了。本题跟最长公共子序列也是非常像。详见动态规划经典题目-最长公共子序列1. 定义状态 设dp[i][j]表示字符串s1的前i个字符与字符串s2前j个字符的最长公共子序列。2. 定义状态转移方程当s1[i] == s2[j]时,有dp[i][j]=原创 2021-05-23 00:17:52 · 581 阅读 · 0 评论 -
动态规划经典题目-最长公共子序列
一、题目描述 求两个字符串s1和s2的最长公共子序列。 这里说明下,子序列是可以不连续字符按顺序组成的字符串。比如字符串democrat的其中一个子序列是dmat。而mdat就不是它的子序列,因为字符出现顺序不符合。示例:输入:s1 = "democrat" s2 = "republican"输出:eca二、解题思路 其实本题就是字符串编辑距离的变种,字符串编辑距离会了,此题就会了。就是字符串编辑距离去掉替换操作,就变成了此问题。1. 定义状态 设dp[i][j]表示字原创 2021-05-23 00:03:00 · 807 阅读 · 0 评论 -
动态规划经典题目-找零钱的方案数
一、题目描述 在美国,硬币按照面值1,5,10,25,50来铸造(单位为美分)。现在考虑按照面值{d1,…, dk}(单位为分)来铸造硬币的某个国家.我们想统计有多少种方式能找开n分钱,并记种数为C(n)。例如当所在国家硬币面值集合为{1,6,10}时,C(5)=1,C(6)到C(9)都是2,C(10)=3,C(12)=4。 给出一种高效算法来算出C(n)并分析该算法的时间/空间复杂度。(提示:通过计算C(n,d)来解决问题,C(n,d)是最高面值为d情况下能找开n分钱的方式种数.千万注意不要原创 2021-05-22 23:18:08 · 4491 阅读 · 0 评论 -
动态规划经典题目-找零钱的最少硬币数
一、题目描述 美国的硬币按照面值1, 5, 10, 25, 50来铸造(单位为美分)。现在考虑按照面值{d1,…, dk}(单位为分)来铸造硬币的某个国家。我们想要寻找一个算法能用最少数目的该国硬币来找开n分钱。给出一种高效算法能确定出用面值集合{d1,…, dk}找开n分钱所需的最少硬币数。 ———题目来源:《算法设计指南》示例:输入:coins = [2,3,5] total = 12输出:3解释:2 + 5 + 5最少需要3枚硬币找开12分原创 2021-05-22 22:38:34 · 2270 阅读 · 0 评论