动态规划
文章平均质量分 57
Link_Ray
这个作者很懒,什么都没留下…
展开
-
POJ1661 help Jimmy(动态规划)
题目链接:http://poj.org/problem?id=1661测试数据:33 8 7 26 14 64 10 45 14 21 6 10 202 3 52 8 15 207 9 135 10 2answer:171017题目要求我们求出Jimmy到地面的最短时间,相信大家都能看得懂题...原创 2017-08-16 18:57:55 · 744 阅读 · 3 评论 -
P1508 Likecloud-吃、吃、吃(背包问题)
https://www.luogu.org/problemnew/show/P1282题解https://www.luogu.org/problemnew/solution/P1282体会先将全部的骨牌大的翻到上面,小的翻到下面,那么其差值之和便是最大的差值之和,现在要将其差值尽量变小,且翻的次数最少,即每翻一次骨牌,就能减少一些差值,对应的次数可能是+1,也有可能是-1(取决于预处理的时...原创 2019-02-27 18:23:19 · 362 阅读 · 0 评论 -
P1063 能量项链(区间dp经典题)
https://www.luogu.org/problemnew/show/P1063题解这个和合并石子的不同之处就是一个珠子多了头和尾的能量,并可以成环,成环的解决方法便是复制一遍即可,合并的时候就要有一些细节处理。比较简单的方法就是把长度为3的区间当成是两个珠子合并的结果,那么n个珠子合并便是长度为n+1的区间。为什么这样呢,因为珠子1与珠子2合并的能量是 珠子1珠子2珠子3转移方程:...原创 2019-03-08 16:56:34 · 386 阅读 · 0 评论 -
P1156 垃圾陷阱 (动态规划)
https://www.luogu.org/problemnew/show/P1156题解这题确定状态很关键,一开始我想的是将时间和生命作为状态,这样需要枚举的便是时间和生命的大小,这些都是不确定的值,而且最大可能到达3000以上,并且一个时间点可能有多个垃圾,每个垃圾又有吃与堆两种选择,遂凉,不可做。但竟然混了82分。其实这就是一个背包问题,不必要考虑时间轴,生命值其实就相当于时间轴,如果...原创 2019-03-09 20:05:31 · 278 阅读 · 0 评论 -
P1052 过河(状态压缩dp)
https://www.luogu.org/problemnew/show/P1052题解很容易得出状态转移方程dp[i] = dp[i-k]+stone[i], s <= k <= t。其中i代表走到i时踩了多少个石头。对于百分之30的数据,直接这样搞就可以了。但是数据范围是10^9,内存根本不够。仔细观察可以发现,最多只有100个石头,每次跳的距离最大10个单位,很明显...原创 2019-03-09 20:14:49 · 290 阅读 · 0 评论 -
[蓝桥杯]倍数问题(背包问题)
复杂度O(3∗n∗k)O(3*n*k)O(3∗n∗k),目测只能过80%的数据,请dalao帮忙给出优化✧(≖ ◡ ≖✿)#include <bits/stdc++.h>using namespace std;#define FOR0(a,b) for(int i = a; i < b; ++i)#define FORE(a,b) for(int i = a; i <...原创 2019-03-21 10:07:17 · 1654 阅读 · 3 评论 -
洛谷P1220 关路灯 (区间动态规划)
https://www.luogu.org/problemnew/show/P1220题解对于从第i个点走到第j个点,肯定会将[i,j]的路灯全部关闭。考虑关闭第i+1个点,现在可能有两种状态,关完[i.j]之后位于i,或者位于j,所以设计状态为dp[i][j][0/1]代表关完[i.j]后位于i或者j,这样转移就显的很简单了。预处理路灯功率前缀和,这样可以很方便的算出[i.j]内的路灯在t...原创 2019-03-29 15:25:39 · 438 阅读 · 0 评论 -
Uva1218 完美服务(树形dp,树上覆盖问题)
题意有一个无根树,要选m个点,使得另外的n-m个点都能与这m个点相连,且只能连一个,求最小的m。题解经典的覆盖问题,覆盖距离为1,有贪心的解法,也有dp的解法。这里讲讲dp的解法。dp[i][0]:选i为服务器。dp[i][1]:i不是服务器,但i的父亲是。dp[i][2]:i和i的父亲都不是服务器。但儿子中有一个是服务器。转移方程:以下v都代表u的儿子。dp[u][0]...原创 2019-03-29 16:52:51 · 376 阅读 · 0 评论 -
洛谷P1373 小a和uim的逃亡(动态规划,维护差值)
https://www.luogu.org/problemnew/show/P1373题解这个状态很明显可以设计为dp[i][j][k1][k2][0/1],代表走到(i,j)时,小A有k1,uim有k2,同时轮到谁走了。但这个转移方程要设计到维护4个变量,需要4重循环,只能过50%的数据。对于100%的数据,这样设计不仅超时还要爆内存。所以需要优化一下状态设计。我们关注的点在于k1是否会等...原创 2019-03-27 11:33:55 · 168 阅读 · 0 评论 -
P1273 有线电视网 (树上分组背包)
题解dp[u][j]表示u的子树中选了j个终端的盈利。这里设v为u的子树。状态转移:dp[u][j]=max{dp[v][k+t]-cost},和分组背包类似,把子树v看成一个组,然后从子树v中选t个物品。这里要注意的是树形dp其实自动省略了一维i,本质上是dp[i][u][j],前i颗子树中第u个结点有j个物品的盈利。这里用dfs从下往上更新可以省略掉第一维,所以这里对状态更新的时候需要...原创 2019-03-31 22:09:13 · 206 阅读 · 0 评论 -
【codeforces gym101853E】Maximum Sum 状态dp经典问题
https://codeforces.com/gym/101853/problem/E题意给一个n×m的矩阵,要求选出一些点,使得这些点不相邻,同时这些点的和要最大。相邻的意义是,行或列或对角的距离等于1。1 <= n <= 16题解一看到n的范围就想到状压dp,这和铺瓷砖很类似,就是一层一层的转移状态。如果直接暴力枚举状态的话复杂度是O(n∗22n)O(n*2^{2n})O...原创 2019-04-08 18:56:19 · 696 阅读 · 0 评论 -
铺瓷砖 状压dp经典问题
题意给出 n×m的矩形方块,可以往上面铺1×2的砖块,问铺满这个方块的方案有多少种。题解砖块可以竖铺和横铺,竖铺的话会影响到下一行,横铺的话不会影响到下一行,这里我们令 1:表示该方块不会影响下一行,0:表示该方块会影响下一行。条件一:考虑(i.j)这一格,如果(i-1,j)上是0,那说明(i-1,j)是竖铺的砖块,那么(i,j)便是1,该点不会影响到下一行了。若(i-1,j)是1,那么...原创 2019-04-03 11:26:53 · 1997 阅读 · 2 评论 -
codeforces 1153D Serval and Rooted Tree(树形dp+贪心)
https://codeforces.com/contest/1153/problem/D题意给出一颗树,有k个叶子结点,每个叶子结点的权值为1~k中的一个,除叶子结点外,每个结点都有min或者max操作,表示取其儿子的最小值或最大值,求根结点最大值是多少。题解dp[i]: 表示以i为根的这个子树中叶子结点里第dp[i]大的值。对于max和min操作贪心的选取。max: dp[u] =...原创 2019-04-16 14:38:48 · 434 阅读 · 0 评论 -
【GYM 101606F】Flipping Coins (概率dp)
https://codeforces.com/gym/101606/problem/F题意初始有n枚硬币正面朝下,一共要抛硬币m次,每次都是以最优的策略抛,问最后正面朝上的硬币的期望是多少。1<=n,m<=400题解最优的策略即不到万不得已不会选已经是正面的硬币抛,一开始想的是用一个公式解出这题,其实这是很不现实的,因为总会以最优的策略抛,根本就没法用公式来代替,况且数据范围...原创 2019-04-14 09:30:49 · 376 阅读 · 0 评论 -
luogu P2577午餐(动态规划)
https://www.luogu.org/problemnew/show/P2577题解这其实是一个背包问题的变形,如果只有一个窗口的话,对于排队打饭的时间是固定的,那么只要按照谁吃的慢谁先上就可以得出最优值。这道题有两个窗口,贪心的方法还是一样的,但是需要考虑分配问题。设dp[i][j][k]: 下标:前i个人在窗口1花了j的打饭时间,在窗口2花了k的打饭时间。值: 前i个人最小的用餐...原创 2019-04-17 16:38:56 · 261 阅读 · 0 评论 -
【Gym 101775】 H. H. Mr. Panda and Birthday Song(动态规划,分类讨论)
https://codeforc.es/gym/101775/problem/H题意连续出现元音长度 >= x || 连续出现辅音长度 >= y ,输出DISLIKE。连续出现元音长度 < x && 连续出现辅音长度 <y,输出LIKE。即满足1又满足2,输出SURPRISE。题解对于1,直接贪心求最大的连续元音/辅音次数,即遇到?时,元/辅...原创 2019-05-01 21:46:09 · 858 阅读 · 0 评论 -
codeforces 1114D Flood Fill(最长回文子序列)
https://codeforces.com/contest/1114/problem/D题意长度为n的序列,每个都有一个颜色值cic_ici,如果一段连续的序列颜色相同,那么可以看成是一块,现在需要选取一个点,每次改变这个点的颜色,问需要多少次使得全部的颜色都一样。题解如果有n个颜色不相同的连续的块,那么最多需要改变n-1次,但如果该块左边和右边的颜色是一样的,那么操作就可以减少一次,...原创 2019-02-27 18:01:02 · 512 阅读 · 3 评论 -
NOIP2017跳房子 二分+dp+单调队列
题目链接:https://ac.nowcoder.com/acm/contest/153/1004题意题解首先知道如果所有的正数加起来小于k那么就输出-1,否则肯定有解。且解的大小在[1,x[n]-d]之间。这里可以二分答案。对答案的判定用到了dp,dp[i]:前i格的最大分值,转移方程为:dp[i] = max(dp[j]+s[i]), j < i ,同时满足j要在能跳的范围之...原创 2019-02-16 20:18:40 · 294 阅读 · 0 评论 -
POJ1088滑雪问题 简单dp(动态规划)已AC
滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 99422 Accepted: 37756DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等原创 2017-08-02 19:51:50 · 889 阅读 · 0 评论 -
HDU1069Monkey and banana Uva437 The Tower of Babylon(动态规划)
A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clev原创 2017-10-07 15:12:51 · 446 阅读 · 0 评论 -
HDU2159 FATE(动态规划)
解题思路:总共有六个参数,n(还需的经验值),m(保留的耐久度),k(怪的种类),s(最大杀怪数),a(所得经验值),b(损耗的耐久度)。 这道题与01背包很类似,每种有怪有选与不选两种,但是由于怪物是无限的,所以在选之中又有选几只的差别。这种类型对应着其实是多重背包问题。 每一种状态可以用三个参数d(i,j,l)来表示,其中i:第几种怪物;j:剩余耐久度;l:剩余杀怪数。 这里其实可以省略一原创 2017-10-08 21:55:14 · 450 阅读 · 0 评论 -
HDU 2844Coins(涉及包含三种背包问题)
题意:给你n种面值分别为A1,A2,A3………..An的硬币,每种硬币对应的数量分别是C1,C2,C3………Cn。问:在可以凑出多少种不同的面值,凑出来的面值必须在1~m之间。解题思路:乍一看以为是母函数问题,但的确可以使用母函数(在不顾时间的情况下也可以得出正确答案),由于题目所给的数值太大,m <= 100000,而硬币数量Ci <= 1000。这套用母函数简直就被炸飞了。最终还得老老实实用动态原创 2017-10-09 21:46:22 · 390 阅读 · 0 评论 -
51Nod1086背包问题V2(二进制优化)
解题思路:这里不能简单的使用多重背包的套路,因为这里数据太大,三个循环肯定超时,所以需采用二进制优化。二进制优化:一个数M 可以由 1 2 4 8 10 …… < M 的数组成。 例如 14 = 2 + 4 + 8。13 = 1 + 2 + 2 + 8。等等 所以一种物品价值为 v,个数为c时可以分成 若干个二进制数相加而成的v*c。 至此物品的种类数目发生了变化并且每种物品的个数有且只有一原创 2017-10-09 22:00:17 · 350 阅读 · 0 评论 -
51Nod 1085背包问题(dp)
思路解析:背包问题其实可以归结为在多段图的有向无环图(DAG)上从规定的起点到终点之间寻找权值之和最长的一条路径(权值全部都为正)。 从起点开始进入下一阶段的结点有若干个,而此阶段的结点均可以到达下一阶段的各个结点(可能是一对一,也有可能是一对多的情况),我们所要做的便是用状态转移方程获得当前阶段的结点进入下一阶段所能得到的解的最优值。这样每一阶段都只由上一阶段决定。 所以此种问题需采用动态规划原创 2017-10-03 22:05:46 · 265 阅读 · 0 评论 -
HDU1506(最大子矩阵)
题意:给定n个长方形,这n个长方形的底边都在一条直线上,然后输入n个长方形的高,问在这组图像中最大长方形的面积。解题思路:因为每个长方形的底边长都是1,所以可以用数组的下标表示每一个长方形,我们所需做的就是求出此长方形能向左向右延伸的最大长度LEN,然后LEN*H即为面积。因为输入的长方形多达一亿个,所以不能一个个从头到尾判断。 L[i]代表第i个长方形向左延伸的最大下标,R[i]表示第i个长方形原创 2017-10-12 22:04:14 · 505 阅读 · 1 评论 -
hdu1505 City game(最大子矩阵)
题意:Bob打算在城市中寻找一块长方形的区域,已知城市中有些地已经被占用,要求我们帮助他选出最大的长方形区域。R代表已被占用,F代表未被占用。分析:这是hdu1506的升级版,即从一维变成了二维。但我们依旧可以把它转换成一维,即以每一列为一个底,算出此列中长方形的高度,然后依次按行(即按高度)dp,找出最大值。 —————> 在每一行找出当前行中第j个点向左向右延伸的最大长度,然后乘原创 2017-10-13 22:11:02 · 351 阅读 · 0 评论 -
POJ2385 Apple catching(dp)
题意:Farmer John有两颗苹果树,分别编号为1和2,每棵树上都长满了苹果,Bessie无法摘到树上的苹果,所以只能等待苹果掉下来,厉害的是Bessie每次都能在苹果碰到地之前接住苹果,但前提是Bessie必须当前时刻在这颗树的下方,已知每分钟都有一颗树会掉落一个苹果,Bessie初始位置在第1颗树。现给出一个T代表总时间,W代表Bessie可以移动的次数,即从一颗树到另一颗树算移动一次。原创 2017-12-10 22:58:21 · 257 阅读 · 0 评论 -
codeforces 919D Substring(简单dp)
题意:给定n个结点,每个结点都有一个小写字符,再给定m条边,寻找一条路径使得这条路径上所有的结点组合起来的字符串中相同字符数最多。 例如 abaac ,其中a有3个即最多。 若这个图有环则输出-1。(注意,图不一定是连通的)做法: 对图进行拓扑排序的过程中进行状态转移。 d [i][k] 代表第i个结点中k字符的数目。 状态转移: d[j][k] = max( d[i][k] + ( n...原创 2018-02-08 00:03:37 · 313 阅读 · 0 评论 -
codeforces round518 div1A Array Without Local Maximums(dp)
题目链接感谢大佬myx12345题意给出一段长度为n的序列,序列中的值都在1到200之间序列满足a1≤a2a_1 \leq a2a1≤a2an≤an−1a_n \leq a_{n-1}an≤an−1ai≤max{ai−1,ai+1}a_i \leq max\{a_{i-1},a_{i+1}\}ai≤max{ai−1,ai+1}此时,小明他打翻了一瓶墨水,使得序列中的某...原创 2018-10-26 11:04:35 · 302 阅读 · 1 评论 -
codeforceECround52div2DThree Pieces(图论)
题意给定一个n∗nn*nn∗n的网格,每个网格都由1,2,3,4,…,n∗n1,2,3,4,\dots ,n*n1,2,3,4,…,n∗n中的数字填充,一开始从1号格开始走,有三种走法。走日字格横走或竖走(走的格子不限)沿着对角线走(走的格子不限)当每次切换不同的行走方式时,行走次数+1,问从1号到2号再到3号…一直到n∗nn*nn∗n号格子的最少行走次数是多少,当行走次数相同,那最...原创 2018-10-24 09:22:58 · 189 阅读 · 1 评论 -
Codeforces Round #533 C、D
C. Ayoub and Lost Array题意在[l,r]区间中选n个数,使其n个数的和可以被3整除,问有多少种可行的方案。题解转换为mod 3的余数,易得在[l,r]中mod 3 = 0 的数的个数为: y[0]=r/3-l/3。mod 3 = 1 的数的个数为: y[1]=(r+1)/3-(l+1)/3。mod 3 = 2 的数的个数为: y[2]=(r+2)/3-(l+2...原创 2019-01-23 10:08:12 · 183 阅读 · 0 评论 -
动态规划 dfs序+LIS
题目链接:https://ac.nowcoder.com/acm/contest/368/B题意题解首先把第二个条件倒过来变成如果在右子树中选一个点,在左子树中选的点都要比它大,这样就相当于 根 < 右子树 < 左子树。可以按照这个顺序搞出一个dfs序列,然后在上面做LIS即可。二分优化LIS: dp[i]表示长度为i的上升子序列的最后一位数最小是多少。代码//https...原创 2019-02-09 18:35:37 · 273 阅读 · 0 评论 -
codeforces 1110 D JongMa 思维dp
题目链接:https://codeforces.com/contest/1110/problem/D题意给出n个不超过m的序列,三个相同的数或者三个连续的数可以构成一个三元组,问这个序列最多可以构造出多少个三元组。题解对于一个数字i,[i,i+1,i+2]这样连续的序列最多不超过2个,因为一旦有3个,那就和[i,i,i],[i+1,i+1,i+1],[i+2,i+2,i+2] 这样没有差别...原创 2019-02-09 18:45:27 · 1167 阅读 · 0 评论 -
Uva 10917 林中漫步 最短路树+DAG动态规划
题意起点为1,终点为2,Bob想从起点走到终点,但是他只会走这样的路,设dis[i]: i点到终点的最短路径,对于边(u,v),如果dis[u]>dis[v],那么Bob就可以走这条边。现在问Bob有多少种方法从起点走到终点。题解先以终点为开始求一遍最短路,这样只要dis[A] < dis[B] 那就连一条B到A的边,整张图就是一个DAG图,从起点开始动态规划求到终点的方案数即可...原创 2019-02-09 19:17:35 · 307 阅读 · 0 评论 -
【2019 南昌邀请赛 Match Stick Game】 火柴dp
https://nanti.jisuanke.com/t/38223题意给出一个用火柴组成的表达式,由k个项和k-1个运算符组成。要求重组这些火柴,使得重组后的表达式结果最大。重组的表达式要满足下面条件。每项的位数必须相同,不能有前导零。项数必须相同。题解预处理出f[i][j][0/1]:代表i位数用j根火柴组成的最大/最小数。mx[k]: k根火柴可以组成的最大值。f[i...原创 2019-05-15 23:02:10 · 336 阅读 · 0 评论