![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 70
十一号路口。
博客仅用于本人记录学习笔记!
展开
-
codeforces 545C woodcutters ---- dp
题目链接https://vjudge.net/contest/214177#problem/C题意:给定n棵树的坐标x和高度h,要求砍树,树砍倒后向左或向右躺在地上时,占的区间不能含有别的树,问最多砍多少树。题解:dp[i][0]表示第i棵树不动,dp[i][1]表示i棵树向左倒在地上,dp[i][2]表示向右倒,dp的转移方程见代码#include <bits/stdc++.h>using namespace std;typedef long long ll;int ..原创 2020-06-06 22:46:13 · 210 阅读 · 0 评论 -
LibreOJ10154 选课 -------- 树形dp(依赖背包)
题目链接https://loj.ac/problem/10154题意:给定n门课程,某些课程有1门先行课,必须先修了先行课才可以选这门课,选择m门课,每门课有学分,求可以获得的最大学分数。题解:参考https://www.cnblogs.com/Chen-Jr/p/11205300.html依赖背包问题,把每门课看作一个点,依赖关系是连成边,形成一个森林,再建立一个超级原点建...原创 2020-04-06 17:22:37 · 216 阅读 · 0 评论 -
LibreOJ10155 数字变换 ------ 树形dp
题目链接https://loj.ac/problem/10155题解:参考https://www.cnblogs.com/forward777/p/11008262.html将每个数x和它的因数和y连边,y变为x的父节点,这样建立一颗树,求出树的最长链即可。具体来说,d1[x]表示最长链的长度,d2[x]表示次长链的长度,y是x的孩子if(d1[y]+1>...原创 2020-04-05 19:05:16 · 275 阅读 · 0 评论 -
LibreOJ 10148 能量项链 ------- 区间dp
题目链接https://loj.ac/problem/10148题解:经典区间dp题合并石子(圆形版)变形题,核心思路是化曲为直。因为最后一定是2个珠子合并,每个珠子是由连续若干个珠子合并的,所以如果项链拆开成直线,不允许圆形合并的话,就枚举端点k,则dp[i][k]和dp[k+1][j]分别表示两边珠子合并最大值,然后手工合并最后一次即可,因为是圆形的,所以可以化曲为直,枚举所...原创 2020-04-04 17:18:34 · 155 阅读 · 0 评论 -
LibreOj 10150 括号配对 ------------ 区间dp
题目链接https://vjudge.net/contest/364190#problem/D题解:对于字符串[A],只需要考虑最外层的2个字符是否配对,如果配对了,dp[i][j]=dp[i+1][j-1],否则的话,例如[[),说明外层左右2个字符其中有1个是目前不能配对上的,需要再外层加字符配对,这时dp[i][j]=min(1+dp[i+1][j],1+dp[i][...原创 2020-04-04 15:22:21 · 164 阅读 · 0 评论 -
(转)HDOJ4336 Card Collector --- 容斥原理 or 状压dp
Card CollectorTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4622 Accepted Submission(s): 2340Special JudgeProblem DescriptionIn your child...转载 2020-02-07 16:13:42 · 184 阅读 · 1 评论 -
LCA问题(倍增法)
之前写过了LCA的两个在线算法之一:DFS+ST方法(DFS+ST)。本篇介绍另一种在线算法,用倍增思想来解决LCA问题。在学习倍增之前,先看一种倍增算法的退化版,有助于理解倍增法。在找a和b的LCA时,先让a和b中深度较大的那一个,向上回溯到与另一个同样深度的位置上。例如下面这个图:假设要找F和E的LCA,先让F向上回溯到他的父节点D的位置,这样就与E处在...转载 2019-11-06 10:34:35 · 192 阅读 · 0 评论 -
NYOJ16 嵌套矩形 --- DAG最长路问题(dp)
题意:n个矩形(n<1000),每个矩形有长a,宽b,选择尽量多的矩形,使得除最后一个矩形外,前一个矩形可以套在后一个矩形里面题解:dp的入门题,dp[i]表示以第i个矩形为结尾的矩形最大个数,dp[i] = max(dp[i],dp[j]+1) (矩形j可以嵌套在矩形i里面)#include <cstdio>#include <cstring&...原创 2019-07-17 16:39:10 · 139 阅读 · 0 评论 -
(转)UVA11825 Hackers' Crackdown --- 状压dp
题目大意:黑客进入了一个网路,这个网络有n台电脑,并且一共有n个服务;每一台电脑你可以攻击它的一个服务,这样它还有和它相邻的电脑这个服务都不能用了;问最多可以让几个服务瘫痪,就是所有电脑都不执行这个服务了;输入有n台电脑;然后是和每台电脑相邻的有几台,分别是哪些;解题报告:题目相当于是把n个电脑看成n个集合,每个集合的元素是这台电脑以及与这台电脑相连的电脑,求把这些集合分成最大的几组,每组所有...转载 2019-07-29 16:21:10 · 104 阅读 · 0 评论 -
UVA10859 Placing Lampposts --- 树形dp
题意: 给定n点m边无向无环图,n<1000,在点上放置灯,一条边的至少一个端点有灯,则称该边被一点覆盖,要求在满足所有边被覆盖的前提下,要求使用尽量少的灯,在灯数量最少的情况下,再要求被2点覆盖的边最多,求此时的灯数量,被2点覆盖的边数,1点覆盖的边数题解: 参考https://www.cnblogs.com/yohanlong/p/7764014.html...原创 2019-07-29 19:26:58 · 250 阅读 · 0 评论 -
UVA10891 Game of Sum ---- 区间dp
题意: 有一个长度n的整数序列,两个人A和B轮流取数,A先,每次只能从左端或者右端取任意数量个数,所有数取完后,统计A和B取走的数之和,假设A和B都足够聪明,求A的得分-B的得分题解:根据蓝书讲解,可以用dp[i][j]表示区间i-j上,两人都采取最佳策略,先手获得分的最高值。则 dp[i][j] = sum(i,j) - min{dp[i][i],dp[i][i+1]...,d...原创 2019-07-21 17:46:50 · 131 阅读 · 0 评论 -
LA3983 Robotruck --- dp+优先队列
题意: 给n个垃圾的(n<100000)坐标x,y,每个垃圾一个重量,给定一个机器人,可以承重C,机器人从原点出发,要求按照顺序依次将1-n的垃圾回收到原点,求最小路程?题解: 动态规划思路,di = min(dj+H(j+1)+Sumi-Sumj+1+Hi), di表示将前i个垃圾回收到原点的最短路程,Sum[i]表示从垃圾1依次走到垃圾i的路程,Hi表示i号垃圾到原点的曼哈顿距...原创 2019-07-30 19:01:03 · 187 阅读 · 0 评论 -
UVA1099 Sharing Chocolate --- 状压DP
题意:给x*y(x,y<100)的巧克力,将其分为n块(n<15),给定这n块的面积,均为整数,每次划分只能横着切或者纵着切成2部分,判断能否切除满足题意的巧克力题解:参考https://www.cnblogs.com/hlmark/p/4059654.html#include <cstdio>#include <cstring>#in...原创 2019-07-31 22:34:27 · 137 阅读 · 0 评论 -
UVALive4727 Jump --- dp+约瑟夫环
题意:有n个人编号1..n,从1开始数,第k个人淘汰,然后又从下一个人开始数,第k个淘汰,问最后淘汰的3个人编号多少,n,k<=500000题解:为了方便表示,假设n个人编号为0...n-1,dp1表示倒数第一个淘汰的编号。first_kill(n,k)表示第一个淘汰的编号,初始化出3个人时的情况,转移方程为dp1[i] = (first_kill(i,k)+1+dp1[i...原创 2019-08-13 15:01:56 · 116 阅读 · 0 评论 -
UVA10003 Cutting Sticks --- 区间dp
题意: 给一根长l的木棍(l<1000),给定木棍上的n个点(n<50),要求每个点处一刀,将木棍分成n+1部分,每次划分时,花费=当前木棍长度,怎么分才能使花费最小,输出最小花费?题解: 给一根木棍,在中间允许的点上任意找一个分成两半,然后就形成2个更小的区间部分了,所以容易想到用区间dp来做。将边界0和l加入,一共n+2个点,将各个点离散化,预处理处任意2点之...原创 2019-08-13 18:03:20 · 119 阅读 · 0 评论 -
(转)[单调队列]烽火传递
Description 烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息;夜晚燃烧干柴,以火光传递军情,在某两座城市之间有 n 个烽火台,每个烽火台发出信号都有一定代价。为了使情报准确地传递,在连续 m 个烽火台中至少要有一个发出信号。请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传递。 In...转载 2019-08-09 16:50:42 · 108 阅读 · 0 评论 -
(转)UVALive3305 Tour --- 双调DP
题目大意:一个平面,有n个点,每个点的x坐标都是不一样的,输入时按照点的x坐标从小到大输入,有一个人从1号点出发,从左往右走,到达最右边的点,然后又从最右边的点回到1号点,问你这段路程的最小总路程是多少?思路:双调DP。设d[ i ][ j ] 表示从点 i 到 1 再从 1 到 j 的最小距离,且规定,i > j ,由于前面那个规定,那么点 i 必须上面去走,求 d[ i ][ j ...转载 2019-08-15 17:14:18 · 112 阅读 · 0 评论 -
HDOJ2089 不要62 --- 数位dp
题意:给定区间[n,m],1<=n<m<1,000,000问有多少个数不含4,且不含62题解:数位dp的典型题,参考https://blog.csdn.net/jk211766/article/details/81474632#include <cstdio>#include <cstring>#include <alg...原创 2019-08-25 23:48:11 · 136 阅读 · 0 评论 -
UVA10253 Series-Parallel Networks --- dp
蓝书p118#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 40using namespace std;typedef long long ll;ll f[MAXN];ll d[MAXN][MAXN];ll C(ll n,ll m) { d...原创 2019-08-26 15:53:21 · 114 阅读 · 0 评论 -
HDOJ5067 Harry And Dig Machine(TSP问题) --- 状压DP
题意:给定nxm的矩形,每个格子值∈[0,100],从左上角出发,将所有非0的格子都要经过至少一次,最后回到原点,两个格子之间的距离为1,求最少需要多少步?(值大于0的格子最多10个)题解:典型的货郎担(TSP)问题:有n个城市,两两之间有道路联通,给出城市i和j之间的距离,求一条经过每个城市1次,最后回到起点的路线,要求距离之和最短。TSP问题在n小的时候可以用动态规划求解,也可以...原创 2019-07-19 17:13:55 · 119 阅读 · 0 评论 -
UVA10755 Garbage Heap --- 降维+dp(最大连续区间和拓展题)
题意: 给定一个axbxc的长方体(a,b,c∈[1,20]),长方体每个格子有个10^9以内的数值,要求找一个子长方体,其格子和最大题解:Leetcode有道最大连续和的题和这个差不多,只不过Leetcode那个题是一维的,给定一维数组,找一个连续区间,其和最大。 做法是直接dp,dp[i] = max(a[i],dp[i-1]+a[i])。这道题推广到三维了,根据蓝书上的讲解,这...原创 2019-07-15 16:49:10 · 118 阅读 · 0 评论 -
HDOJ1159 Common Subsequence ----LCS(动态规划经典题)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1159Problem DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <...原创 2018-10-17 19:27:42 · 246 阅读 · 0 评论 -
HDOJ1421 搬寝室 ---- 动态规划+贪心
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1421Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是...原创 2018-10-18 08:48:07 · 283 阅读 · 0 评论 -
HDOJ3449 Consumer -----依赖背包(经典题)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3449Problem DescriptionFJ is going to do some shopping, and before that, he needs some boxes to carry the different kinds of stuff he is going to buy...原创 2018-10-07 22:12:35 · 175 阅读 · 0 评论 -
HDOJ2159 FATE-----二维费用背包
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个...原创 2018-09-05 12:42:06 · 146 阅读 · 0 评论 -
HDOJ2084 数塔------记忆化搜索
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗? ...原创 2018-09-04 20:55:20 · 190 阅读 · 0 评论 -
HDOJ1171 Big Event in HDU 多重背包
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1171 Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer C...原创 2018-08-16 12:49:17 · 179 阅读 · 0 评论 -
HDOJ1248 寒冰王座 完全背包
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1248寒冰王座Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13215 Accepted Submission(s): 674...原创 2018-08-12 17:45:01 · 504 阅读 · 0 评论 -
HDOJ1203 I NEED A OFFER 01背包+概率
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22750 Accepted Sub...原创 2018-08-12 17:17:40 · 163 阅读 · 0 评论 -
POJ2411 Mondriaan's Dream --- 状压dp
题目链接 http://poj.org/problem?id=2411DescriptionSquares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he ha...原创 2018-12-28 15:04:09 · 176 阅读 · 0 评论 -
计蒜客--蒜头君王国 概率dp
参考自https://blog.csdn.net/nbl97/article/details/79968761 #include <bits/stdc++.h>#define MAXN 100005 using namespace std;int n; // 输入double p;double result[MAXN]; // i个节点联通的概率 // 排列组...原创 2018-12-30 23:08:06 · 419 阅读 · 0 评论 -
LA3695 Distant Galaxy --- 动态规划
题目链接https://vjudge.net/problem/UVALive-3695题意:给出平面上的n个点,找一个四条边平行于坐标轴的矩形,使得边界上包含尽量多的点。题解:枚举平行于x轴的2条边即可,假设2条竖线i和j,left[i]表示i坐标在上下边界上的点,on[i]表示竖线上位于上下边界的点(不含边界),on2和on含义一样,只是包含边界,那么点数=left[j]-le...原创 2019-07-14 21:08:05 · 109 阅读 · 0 评论 -
UVA11384 正整数序列 --- 动态规划
算法竞赛入门训练指南(蓝书)第26页,思路就是自己挨着试下,总结规律,发现每次都是把后面一半尽量先减去,这样后面的数就会与前一半重复,重复部分等价于没有。所以递推式是f(n) = f(n/2) + 1#include <cstdio>#include <cstring>#include <algorithm>#include <c...原创 2019-07-08 11:43:59 · 192 阅读 · 0 评论 -
计蒜客 和谐--dp
题解:这题和leetcode的最大子段和思路差不多,只是在最大子段和的基础上变了点形,可以先网上看下最大子段和的题解,然后这题应该就能大致知道怎么做了。先处理数组,取相邻2个数的绝对值,然后分2种情况,从奇数点或者偶数点开始计算。具体思路见代码。另一种做法是动态规划,求2个dp数组,表示从i开始的最大/最小和谐度,然后dp一遍即可 #include ...原创 2019-02-24 14:58:03 · 170 阅读 · 0 评论 -
计蒜客-乘法最大 动态规划
题目链接 https://www.jisuanke.com/course/709/36575题解: 参考 https://blog.csdn.net/ruzhuxiaogu/article/details/25695671#commentBox使用动态规划,dp[i][j]表示前i个数中插入j个乘号的乘积最大值,要求插入j个乘号,可以将j个乘号拆出最后一个单独出来,这样原来的数就...原创 2019-01-23 00:45:17 · 273 阅读 · 0 评论 -
计蒜客-合并石子 区间dp
题目链接 https://www.jisuanke.com/course/709/36587题解: LeetCode里面有个戳气球的题和这个类似,用区间dp来解。由于n堆(n>=2)石子合并,最终一定会有个只剩2堆石子的中间状态,这个状态就是突破口。最终的2堆石子一定是在原来的石子里面连续的,可以用dp[i][j]表示区间i..j的石子合并后最小的体力消耗,n堆石子消耗...原创 2019-01-27 11:05:00 · 158 阅读 · 0 评论 -
计蒜客-双人游戏 dp
题目链接 https://www.jisuanke.com/course/709/36579题解: 这道题想了半天没想到好的方法,看了答案的代码后才恍然大悟。从左上角和右上角出发最终会形成2条路径,这2条路径肯定是相交的。要使积分和最大,交点肯定只有1个(解此题的关键所在)。理由: 假设2条路径已经交于1点了,由于一条路只能往右(下)发展,另一条路只能往左(下)发展,所以如果...原创 2019-01-26 09:28:27 · 219 阅读 · 0 评论 -
计蒜客-弹簧板 动态规划
题目链接 https://www.jisuanke.com/course/709/36577题解: 从最后一个弹簧板倒着往前推,用d[I]数组记录下在i处下落的弹簧多少次可以出去,这样dp[i] = 1 + dp[i+a[i]]#include <cstdio>#include <cstring>#include <algorithm>u...原创 2019-01-25 21:42:03 · 768 阅读 · 0 评论 -
计蒜客-简单的划分数 动态规划
题目链接 https://www.jisuanke.com/course/709/36576题解: 典型的整数划分问题 , 建议参考母函数(整数划分)的资料将几种比较典型的整数划分问题搞懂#include <cstdio>#include <cstring>#include <algorithm>using namespace std;...原创 2019-01-24 23:47:46 · 133 阅读 · 0 评论 -
HDOJ2602 Bone Collector 01背包模板题
#include<cstring>#include<algorithm>#include<cstdio>using namespace std;int n,V;int dp[1005];int v[1005],w[1005]; //价值和重量int main(){ int T; scanf("%d",&T); while(T--...原创 2018-05-18 00:00:03 · 124 阅读 · 0 评论