![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
One believe
欢迎来到Onebelieve的博客
展开
-
GO 力扣 11.盛最多水的容器
盛最多水的容器这道题要求的就是两个柱子围城的最大的矩形这个题只需要我们枚举一下两个指针,每一次将矮的那一侧的指针向中移动,然后计算一下最大值,直到指针相交。代码如下:func maxArea(height []int) int { i:=0 j:=len(height)-1 ans:=0 for i<j { ans=max(ans,(j-i)*min(height[j],height[i]) ) Min(&i,&j原创 2021-04-20 21:49:29 · 149 阅读 · 2 评论 -
139. 回文子串的最大长度(字符串哈希)
传送门描述如果一个字符串正着读和倒着读是一样的,则称它是回文的。给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。输入格式输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。输出格式对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例格式)。每个输...原创 2020-01-19 15:10:07 · 376 阅读 · 0 评论 -
1084. 数字游戏 II(数位dp)
传送门描述由于科协里最近真的很流行数字游戏。某人又命名了一种取模数,这种数字必须满足各位数字之和 mod N 为 0。现在大家又要玩游戏了,指定一个整数闭区间 [a.b],问这个区间内有多少个取模数。输入格式输入包含多组测试数据,每组数据占一行。每组数据包含三个整数 a,b,N。输出格式对于每个测试数据输出一行结果,表示区间内各位数字和 mod N 为 0 的数的个数。数据范围...原创 2020-01-15 14:05:25 · 539 阅读 · 1 评论 -
1083. Windy数 (数位dp)
传送门描述Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有多少个 Windy 数?输入格式共一行,包含两个整数 A 和 B。输出格式输出一个整数,表示答案。数据范围1≤A≤B≤2×1091≤A≤B≤2×1091≤A≤B≤2×109输入样例1:1 1...原创 2020-01-15 13:44:13 · 360 阅读 · 0 评论 -
1082. 数字游戏(数位dp)
传送门描述科协里最近很流行数字游戏。某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如 123,446。现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。输入格式输入包含多组测试数据。每组数据占一行,包含两个整数 a 和 b。输出格式每行给出一组测试数据的答案,即 [a,b] 之间有多少不降数。数据范围1≤a≤b≤231−...原创 2020-01-15 00:00:06 · 461 阅读 · 0 评论 -
不要62(数位dp)
传送门描述杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有 4 或 62 的号码。例如:62315,73418,88914 都属于不吉利号码。但是,61152 虽然含有 6 和 2,但不是 连号,所...原创 2020-01-14 22:26:43 · 251 阅读 · 0 评论 -
1068. 环形石子合并(区间dp)
传送门描述将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算:选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。输入格式第一行包含整数 n,表示共有 n 堆石子。第...原创 2020-01-14 15:54:23 · 228 阅读 · 0 评论 -
320. 能量项链 (区间dp)
传送门描述在Mars星球上,每个Mars人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,...原创 2020-01-14 15:38:52 · 283 阅读 · 1 评论 -
acwing 282. 石子合并(区间dp)
传送门描述设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2...原创 2020-01-13 22:22:26 · 237 阅读 · 0 评论 -
acwing 274. 移动服务(线性dp)
传送门描述一个公司有三个移动服务员,最初分别在位置1,2,3处。如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。从 p 到 q 移动一个员工,需要花费 c(p,q)。这个函数不一定对称,但保证 c(p,p)=0。给出N个请求,请求发生的位置分别为 p1~pN。公司必须按顺序依次满足所有请...原创 2020-01-13 15:39:42 · 170 阅读 · 0 评论 -
acwing 273. 分级(线性dp)
传送门描述给定长度为N的序列A,构造一个长度为N的序列B,满足:1、B非严格单调,即B1≤B2≤…≤BN或B1≥B2≥…≥BN。2、最小化 S=∑Ni=1|Ai−Bi|。只需要求出这个最小值S。输入格式第一行包含一个整数N。接下来N行,每行包含一个整数Ai。输出格式输出一个整数,表示最小S值。数据范围1≤N≤2000,0≤Ai≤109输入样例:713245...原创 2020-01-13 13:40:13 · 274 阅读 · 0 评论 -
acwing 271. 杨老师的照相排列(线性dp)
传送门描述有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk)第1排站在最后边,第 k 排站在最前边。学生的身高互不相同,把他们从高到底依次标记为 1,2,…,N。在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。问一共有多少种安排合影位置的方案?下面的一排三角矩阵给出了当 N=6,k=3,N1=3,N2=2,N3...原创 2020-01-12 23:12:54 · 222 阅读 · 0 评论 -
acwing 758. 切割树(树形dp)
传送门描述给你一棵含有n个结点的树,编号为0~n-1,这n个结点都被染成了黑色或白色。显然,对于一棵树而言,我们每去掉一条边就能把树分成两部分。现在,要求你把这棵树切开,使得每一个连通块内只有一个白色结点。问共有多少种切开的方式满足以上条件,如果被删除的边集不同,我们则认为两种方式不同,反之,认为相同。请输出对1000000007取模后的结果。输入格式第一行仅包含一个正整数n,表示...原创 2020-01-12 22:06:17 · 407 阅读 · 0 评论 -
acwing 1078. 旅游规划(树形dp)
传送门描述W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员。具体来说,W 市的交通网络十分简单,由 n 个交叉路口和 n−1 条街道构成,交叉路口路口编号依次为 0,1,…,n−1 。任意一条街道连接两个交叉路口,且任意两个交叉路口间都存在一条路径互相连接。经过长期调查,结果显示,...原创 2020-01-12 17:41:43 · 394 阅读 · 0 评论 -
acwing 1072. 树的最长路径(树形dp)
传送门描述给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。输入格式第一行包含整数 n。接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai 和 bi 之间存在一条权值为 ci 的边。输出格式输出一个整数,...原创 2020-01-12 13:53:00 · 270 阅读 · 0 评论 -
acwing 746.树的重心(树形dp)
传送门描述给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数n,表示树的结点数。接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。输出格式输出一个...原创 2020-01-11 21:52:30 · 216 阅读 · 0 评论 -
acwing 286. 选课(背包类树形dp)
传送门描述学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了 N 门的选修课程,每个学生可选课程的数量 M 是给定的。学生选修了这 M 门课并考核通过就能获得相应的学分。在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修。例如《Windows程序设计》必须在选修了《Windows操作基础》之后...原创 2020-01-11 20:00:29 · 155 阅读 · 0 评论 -
acwing 285. 没有上司的舞会(树形dp)
传送门描述Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。接下来N行,第 ...原创 2020-01-11 18:01:39 · 414 阅读 · 0 评论 -
acwing 91. 最短Hamilton路径(状压dp)
传送门描述给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x]...原创 2020-01-11 15:40:50 · 147 阅读 · 0 评论 -
洛谷P2015 二叉苹果树(树形dp)
传送门题目描述有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树2 5 \ / 3 4 \ / 1现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数...原创 2020-01-11 14:42:40 · 133 阅读 · 0 评论 -
acwing 272. 最长公共上升子序列
传送门描述熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。小沐沐说,对于两个数列A和B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长...原创 2020-01-10 18:32:12 · 196 阅读 · 0 评论 -
acwing 895. 最长上升子序列
传送门描述给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4这个可以动态规划,也可以其他,动态规划复杂度为O(n*n),贪心+二分则可以达到O(n...原创 2020-01-10 17:04:24 · 200 阅读 · 0 评论 -
acwing12. 背包问题求具体方案
传送门描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…N。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个...原创 2020-01-10 14:18:55 · 217 阅读 · 0 评论 -
acwing 11. 背包问题求方案数
传送门描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7 的结果。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用...原创 2020-01-09 22:41:40 · 193 阅读 · 0 评论 -
acwing 10. 有依赖的背包问题
传送门有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总...原创 2020-01-09 19:08:08 · 118 阅读 · 0 评论 -
acwing 9. 分组背包问题
传送门描述有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 S...原创 2020-01-09 15:35:31 · 126 阅读 · 0 评论 -
acwing 8. 二维费用的背包问题
传送门描述有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整...原创 2020-01-09 14:26:56 · 130 阅读 · 0 评论 -
acwing 7. 混合背包问题
传送门描述有 N 种物品和一个容量是 V 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si 次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来...原创 2020-01-09 14:15:34 · 134 阅读 · 0 评论 -
acwing 6. 多重背包问题 III(单调队列优化)
传送门描述有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V (0<N≤1000, 0<V≤20000),用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格...原创 2020-01-09 13:35:39 · 199 阅读 · 0 评论 -
acwing 5. 多重背包问题 II(多重背包二进制优化)
传送门描述有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格...原创 2020-01-08 19:04:15 · 172 阅读 · 0 评论 -
POJ 1417 True Liars(带权并查集+DP)
传送门DescriptionAfter having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was finally cast ashore on a foggy island. Though he was exhausted and despaired, he was still fortu...原创 2020-01-07 21:34:50 · 2245 阅读 · 0 评论 -
51nod 1006 最长公共子序列Lcs
传送门描述给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为:abcicbaabdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。输入第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)输出输出最长的子序列,如果有多个,随意输出1个。输入样例abcicbaabdksc...原创 2019-12-17 23:51:22 · 89 阅读 · 0 评论 -
动态规划之最长回文子串
前言虽然求最长回文子串有更快的方法,但是用动态规划做也行,就当是扩充知识面了闲话不多说,开始正题。正文最长回文串就是例如“abcba”这种字符串,然后需要在给定的字符串里面求一个最长的回文子串,这时候我们用动态规划最重要的就是找一个状态转移方程:dp[i][j]={( s[i]==s[j] )&&(j−i<=2∣∣dp[i+1][j−1])&nb...原创 2019-11-20 21:57:37 · 136 阅读 · 0 评论