动态规划
糖琴心
这个作者很懒,什么都没留下…
展开
-
leetcode 22. 括号生成
dfsclass Solution {public: void dfs(string cur,int leftnum,int rightnum,int n,vector<string>& ans){ if(leftnum>n||rightnum>n)return; if(leftnum<rightnum)retur...原创 2020-04-16 12:09:53 · 141 阅读 · 0 评论 -
leetcode 72 编辑距离:另一种dp table的查找方式
思路定义dp[i][j]为word1的前i个字符和word2的前j个字符相同需要的最少操作也就是说在递归的时候是从后面往前面递归的。为什么会这么想首先,转移方程是好写的。但是实现的过程是需要细节的。首先是basecase。经过了股票问题的思考后。在这里,当i<0或者j<0的情况,很容易返回另一个的对应情况。这个没什么好说的。关键是构建一个能够查找结果的表。我的创新这里使用...原创 2020-04-15 12:51:59 · 260 阅读 · 0 评论 -
leetcode股票问题dp汇总
股票问题dp1状态设定定义dp[i][k][j]为第i天(从0~n-1),当前最多买入k次,j为0或1,表示当前是否持有股票。2 递推关系dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]) max( 选择 rest , 选择 sell )解释:今天我没有持...原创 2020-04-14 12:30:02 · 204 阅读 · 0 评论 -
leetcode10+leetcode 44 正则匹配题型总结
正则匹配题型总结这两道题目其实都是属于匹配类型的题目,都有一个‘*’表示可以任意匹配多个字符,而都有一个’.‘表示可以匹配单个字符。比较好想的递归思路:递归思路主要有2种,一种是从前向后匹配,一种是从后往前匹配。多数时候两种都可以,我这里主要用的是从前向后匹配,所以我定义的dp[i][j]为s的第i个字符之后和p的第j个字符之后可以互相匹配上的概率。这样的话逻辑就比较清晰了,初始化dp[i...原创 2020-04-06 21:53:03 · 189 阅读 · 0 评论 -
动态规划入门资料
动态规划入门感觉有些难度,搜索了一些资料首先可以看这个视频,3个例子都比较简单,也比较全面https://www.bilibili.com/video/av45990457然后关于背包问题可以看下面这个博客里的背包9讲https://www.cnblogs.com/jbelial/articles/2116074.html...原创 2019-09-11 18:36:26 · 124 阅读 · 0 评论 -
洛谷多维DP(5)P1855 榨取kkksc03——二维费用的背包问题
P1855 榨取kkksc03输入输出样例输入 #1复制6 10 101 12 3 3 22 55 24 3输出 #1复制4总结目录三维dp代码#include<iostream>#include<climits>#include<algorithm>#include<cstring>using namespa...原创 2019-10-09 10:15:58 · 203 阅读 · 0 评论 -
洛谷线性DP训练(5):P1282 多米诺骨牌——变种背包
P1282 多米诺骨牌输入输出样例输入 #1复制46 11 51 31 2输出 #1复制1其他人的看法遇见这种直接背包。背包的本质是什么???是每一个物品或动作对所有当前状态的更新。本题就是如此,翻一次就把原来的加的差值颠倒。并且,本题强制必须要用每一个动作,所以就必须(即+a-b或+b-a)从前面一个状态+改变量去更新因为改变量有正有负,所以不好降一维,总结...原创 2019-10-06 16:04:48 · 200 阅读 · 0 评论 -
洛谷线性动态规划训练(4)P1140 相似基因——串匹配,二维线性动态规划典例
输入格式共两行。每行首先是一个整数,表示基因的长度;隔一个空格后是一个基因序列,序列中只含A,C,G,TA,C,G,T四个字母。1 \le1≤序列的长度\le 100≤100。输出格式仅一行,即输入基因的相似度。输入输出样例输入 #1复制7 AGTGATG5 GTTAG输出 #1复制14要点目录1.如何根据最后一步得到状态转移方程2.初始条件的确定与计算顺序3.数据的...原创 2019-10-05 21:10:59 · 258 阅读 · 0 评论 -
洛谷线性动态规划训练(3):P1880 [NOI1995]石子合并——区间DP
P1880 [NOI1995]石子合并题目描述在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.输入格式数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.输出格式输出共2行,第1...原创 2019-10-05 09:53:34 · 268 阅读 · 0 评论 -
洛谷线性动态规划训练(2):P1280 尼克的任务
P1280 尼克的任务题目描述尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去...原创 2019-10-04 23:14:07 · 425 阅读 · 0 评论 -
洛谷线性动态规划训练(2)动态规划组合状态:P1091 合唱队形——上升序列与下降结合
P1091 合唱队形 题解输入输出样例输入 #1复制8186 186 150 200 160 130 197 220输出 #1复制4分析这个题目还是很有意思的,因为它并不是直接给出了动态规划的方程,而是类似于最大子列和的方法。在最大子列和中,我们的定义是dp[i]:以nums[i]为结尾的最大子列和,然后基于最后一步的连续性和dp[i-1]结合进行求解。在最长升序序列中,我...原创 2019-10-04 20:18:57 · 196 阅读 · 0 评论 -
洛谷线性动态规划训练(1)与二分查找训练:P1020 导弹拦截
P1020 导弹拦截题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是\le 50000≤50000的正整数),计算这套系统...原创 2019-10-04 16:47:01 · 281 阅读 · 0 评论 -
洛谷线性动态规划训练(1):leetcode 300.最长上升子段、P1020 导弹拦截
leetcode 300.最长上升子段给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。分析这个是属于求最大值的动态规划,一个非常典型的问题,值得深思。一开始想到的是dp[i]定义为:在[0,i]这个区间内的最大上升子序列的长度那么我们就需要考...原创 2019-09-30 22:26:45 · 314 阅读 · 0 评论