动态规划
文章平均质量分 91
动态规划类习题总结
Gene_INNOCENT
Wait for the sunrise!
展开
-
算法萌新如何学好动态规划(三)
前言本文是「动态规划」系列文章的第三篇,作为「动态规划(二)- 线性 DP」的一个延伸,将主要聚焦于动态规划经典模型 —— 背包问题的讲解。背包问题属于线性 DP 模型,之所以单独拎出来讲,主要是因为该问题信息量大且十分重要,属于面试中常考且必会的知识,因此我们将其放在本系列的第三篇进行介绍。本文一共分为三个部分,具体内容框架如下所示:前文回顾解题思路回顾回顾一下第一篇文章,动态规划解题过程一共分为两步,一是确定「DP 状态」,二是确定「DP 转移方程」。「DP 状态」的确定有两大原则,一原创 2020-12-05 23:46:53 · 355 阅读 · 0 评论 -
算法萌新如何学好动态规划(二)
前言如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。本文是「动态规划」系列文章的第二篇,主要聚焦于常见线性 DP 模型的讲解。线性 DP 是所有 DP 模型中最为常见与基础的模型,也是面试中最频繁考察的动态规划模型,因此我们将其放在本系列的第二篇进行介绍。本文一共分成四个部分,具体内容框架如下所示:动态规划解题思路回顾在正式开始线性 DP 的介绍前,我们需要回忆一下「动态规划(一)」中的主要内容,即动态规划的解题思路。动原创 2020-12-05 23:44:53 · 397 阅读 · 0 评论 -
数位DP算法概述及习题
数位DP系列习题1. Daniel and Spring Cleaning题意: 给出区间 [l,r][l,r][l,r],查询多少对 (a,b)(a,b)(a,b) 满足如下条件。(0≤l≤r≤109)(0\leq l\leq r\leq 10^9)(0≤l≤r≤109)a+b=a xor ba+b=a \ xor \ ba+b=a xor bl...原创 2019-11-02 11:13:17 · 1648 阅读 · 0 评论 -
算法萌新如何学好动态规划(一)
前言本文是我在「力扣」上写的第二篇文章,现将其发布于此处。动态规划问题一直是大厂面试时最频繁出现的算法题,主要原因在于此类问题灵活度高,思维难度大,没有很明显的套路做法。也正是因为这个原因,我们打算出一个「动态规划」系列文章来尝试破解面试中所涉及的动态规划问题。而本文就是这个系列的第一篇文章,主要目的是说明动态规划是什么,动态规划问题应该如何思考?本文一共分成三个部分,具体内容框架如下所示:宝石挑选问题引入小 Q 是一个宝石爱好者。这一天,小 Q 来到了宝石古董店,店家觉得小 Q 是个宝石原创 2020-08-06 09:09:13 · 1752 阅读 · 0 评论 -
DP 转移方程 —— 单调队列优化 & 斜率优化 & 李超树优化
前言最近比赛遇到了一道李超树优化 DPDPDP 方程的题,比赛时推出了方程,但由于对斜率优化方程格式的不熟悉,误以为是斜率优化的问题,导致最终错失 ACACAC,因此想要将这三种格式的方程列举在一起,便于后续查阅。单调队列优化首先我们需要回忆单调队列的作用,O(n)O(n)O(n) 求出每一个大小为 KKK 的窗口中的最大、最小值,因此我们可以得到如下 DPDPDP 转移方程:f[i]=max(v[j])+base[i],i−j≤Kf[i] = max(v[j])+base[i],i-j\leq原创 2020-07-23 10:33:27 · 1475 阅读 · 0 评论 -
【CF Contest-1228 E】Another Filling the Grid【容斥】
题意:给定一个 n∗nn*nn∗n 的格子,每个格子填写 [1,k][1,k][1,k] 的一个数,保证每行每列至少有一个 111,输出有多少种填写方案。(1≤n≤250,1≤k≤109)(1\leq n\leq 250,1\leq k\leq 10^9)(1≤n≤250,1≤k≤109)思路:这个题可以用 dpdpdp 思考,f[i][j]f[i][j]f[i][j] 表示前 iii 行...原创 2019-10-18 22:21:24 · 287 阅读 · 0 评论 -
【UVALive - 7344】Numbered Cards【数位DP+状压DP】
题意:给出一个 nnn,现可以从 111 ~ nnn 中任意选取若干个数字,要求所有数字不存在重复的数位。例如 {1,2,31,2,31,2,3} 和 {2,112,112,11} 是合法的,但是 {1,2,101,2,101,2,10} 和 {2,5,122,5,122,5,12} 是不合法的。现给出一个 nnn,询问存在多少个集合满足上述要求,结果模 1e9+71e9+71e9+7。(1≤...原创 2019-08-18 21:06:02 · 1317 阅读 · 0 评论 -
【 Codeforces Round #551 (Div. 2) D】Serval and Rooted Tree【树形DP】
题意:给定一棵nnn个节点的树,每个点有一个标志fff,f=1f = 1f=1表示该节点权值等于子节点中权值最大值,f=0f=0f=0表示该节点权值等于子节点权值中权值最小值。假如这棵树中有kkk个叶子节点,则可以对这kkk个叶子节点进行赋值,分别为1−k1-k1−k,不得重复。问根节点权值的最大值为多少。思路:这貌似是一个典型的树形DP问题,但是比赛的时候我还是没做出来,菜哭…本题最直...原创 2019-04-16 19:47:58 · 176 阅读 · 0 评论 -
【0x50「动态规划」例题】LCIS【最长公共上升子序列】
题意:给出两个数列 AAA 和 BBB ,输出两个数列的最长公共上升子序列的长度。思路:我们可以仿照最长公共子序列的状态定义,来给出 LCISLCISLCIS 的状态定义,dp[i][j]dp[i][j]dp[i][j] 表示数列 AAA 中 [1,i][1,i][1,i] 与数列 BBB 中 [1,j][1,j][1,j] 的以 B[j]B[j]B[j] 为结尾的最长公共子序列长度。因...原创 2019-03-13 16:26:52 · 275 阅读 · 0 评论 -
【POJ 2279】Mr. Young’s Picture Permutations【线性DP】
题目:有N个学生合影,站成左端对齐的k排,每排有 N1,N2,…Nk个人,第一排在最后面。学生的身高互不相同,分别为1-N,并且合影时要求每一排从左往右身高递减,每一列从后往前身高递减,问有多少种安排合影的方案。N&lt;=30, k&lt;=5 .N&lt;=30,\ k&lt;=5\ .N<=30, k<=5&nbs...原创 2019-03-13 16:06:05 · 312 阅读 · 0 评论 -
【UVA-10891】Game of Sum【区间DP】
题意:一个序列,选手 AAA、BBB 轮流从序列中从左端或者右端选一段区间,然后区间和加到自己的权值中。两个选手都会按照最优的方式进行选取,问先手 AAA 最多可以比 BBB 多拿多少。 (1≤n≤100)(1\leq n\leq 100)(1≤n≤100)思路:很明显这是一道 DPDPDP 问题,又因为只能从左端点或右端点拿,因此不难想到用区间 DPDPDP 的方法来解决此题。既然是区...原创 2019-03-21 19:55:52 · 214 阅读 · 0 评论 -
【2016-2017 ACM-ICPC (ECNA 2016) F】Removal Game【区间DP】
题意: 给定一个序列。将序列中的一个数字消去的代价是与这个数字相邻的两个数字的gcd,问将所有数字消去的最小代价。注意这个序列是环形的。思路: 首先我们比较容易发现这是一个区间DP问题,于是问题就变成了如何列区间DP状态。一开始考虑的是dp[i][j]表示区间[i,j]全部消去的最小代价,然后在区间[i,j]中枚举第一个消去的k进行更新。然后会发现一个问...原创 2019-03-12 22:30:24 · 394 阅读 · 0 评论 -
【Gym-100837E】Optimal Rest【完全背包】
题意:音符格式转换成长度最小且字典序最小的格式。一共有777种音节,分别是R1R1R1、R2R2R2、R4R4R4、R8R8R8、R16R16R16、R32R32R32、R64R64R64,分别表示1、12\frac{1}{2}21、14\frac{1}{4}41、18\frac{1}{8}81、116\frac{1}{16}161、132\frac{1}{32}321、164\fra...原创 2019-05-10 18:18:30 · 1306 阅读 · 0 评论 -
【Gym - 100837 F】Controlled Tournament【竞赛树 状态压缩】
题意:一共NNN个人,给出任意两个人之间的胜负关系,你的编号是MMM。现在需要安排一棵竞赛树使得MMM能够胜出,问使竞赛树高度最小且MMM获胜的安排方案一共有多少个。(1≤N≤16)(1\leq N\leq 16)(1≤N≤16)思路:根据题意以及数据范围,可以很明显的发现这是一个状压dpdpdp,因此我们来考虑dpdpdp的状态。既然是状态,那肯定要记录当前的状态,即选了哪些人,然后还...原创 2019-05-10 19:05:39 · 1353 阅读 · 0 评论 -
【Codeforces Round #576 (Div. 2)】Rectangle Painting 1【记忆化搜索】
题意:给出一个 n∗nn*nn∗n 的网格,其中有一些为黑,有一些为白。现在将一块 w∗hw*hw∗h 的区域全部涂成白色的花费是 max(w,h)max(w,h)max(w,h),问将整个区域全部涂成白色的最少花费是多少?(1≤n≤50)(1\leq n\leq 50)(1≤n≤50)思路:无论是从题干还是从数据范围,都可以比较明显地看出这是一道 DPDPDP。而 DPDPDP 问题最关...原创 2019-08-03 19:35:03 · 223 阅读 · 0 评论 -
斯坦纳树算法概述及习题
斯坦纳树概述一、适用问题一个图中,有若干个关键点,将这几个关键点连在一起的最小花费。直观的理解,就是带关键节点的最小生成树。当然不同的题会有不同的限制,比如关键节点必须是叶子节点,或者求一个斯坦纳森林(需要对斯坦纳树再进行一次状压)。二、DP思想在图上找一个树,应该如何定状态呢?还记得第一次遇到斯坦纳树问题时,状态定的五花八门,眼花缭乱的,怼了一整场也只是空耗时间。其实,斯坦纳树的状...原创 2019-08-13 21:28:53 · 2514 阅读 · 0 评论 -
【Gym-102059 G】Fascination Street【亏欠型DP思想】
题意:一条街上一共 NNN 个点,需要在某些点上建路灯,使得整条街被照亮,一个路灯可以照亮左右两个点,每个点都有一个建路灯的花费。现在你还有 KKK 次机会,可以交换两个路灯的建造费用,求使得整条街被照亮的最小花费。(1≤N≤250000,0≤k≤9)(1\leq N\leq 250000,0\leq k\leq 9)(1≤N≤250000,0≤k≤9)思路:如果这道题没有 KKK 次交换...原创 2019-08-10 16:13:58 · 391 阅读 · 0 评论 -
【2019南京ICPC网络赛 D】Robots【DAG上的随机游走】
题意:给出一个有向无环图,从 111 号点向 nnn 号点前进。每次等概率地转移到后继节点,也有可能留在当前节点。定义每一天的花费是当前走过的天数,即第 iii 天的花费是 iii,求从起点走到终点的总花费。(2≤n≤105,1≤m≤2∗105)(2\leq n\leq 10^5,1\leq m\leq 2*10^5)(2≤n≤105,1≤m≤2∗105)思路:令 day[i]day[i]...原创 2019-09-04 09:59:19 · 285 阅读 · 0 评论 -
【Codeforces Round #585 (Div. 2) E】Marbles【状压DP】
题意:有一个 nnn 个数字的序列,数字范围在 1~201~201~20 之间,现在要对这些数字进行重新排列,使得相同数字出现在一个连续区间,如 113322113322113322、222222334442222223344422222233444 都是符合题意的序列。重新排列这个序列的操作只有交换两个相邻的数字,现问最少需要交换多少次可以使这个序列变成符合题意的序列。(2≤n≤4∗105)(...原创 2019-09-16 14:42:39 · 590 阅读 · 2 评论 -
【完全背包】自然数拆分Lunatic版
题目: 给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。求拆分的方案数mod 2147483648的结果。1 <= N <= 4000。 地址:http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%8...原创 2018-07-18 22:21:47 · 822 阅读 · 0 评论 -
【0x50 动态规划】传纸条【线性DP】
题意:给定一个 N∗MN*MN∗M 的矩阵 AAA,每个格子中有一个整数。现在需要找到两条从左上角 (1,1)(1,1)(1,1) 到右下角 (N,M)(N,M)(N,M) 的路径,路径上的每一步只能向右或向下走。路径经过的格子中的数会被取走。两条路径不能经过同一个格子。求取得的数之和最大是多少。 N,M≤50。N,M\leq50。N,M≤50。思路:DPDPDP 问题,首先需要列一下状态...原创 2019-03-14 19:56:53 · 266 阅读 · 0 评论 -
【0x50 动态规划】Mobile Service【线性DP】
题意:一个公司有3个服务员,初始位置分别为1,2,31,2,31,2,3 处。现在有 NNN 个请求,请求的位置发生在 pipipi ,服务员从 ppp 位置到 qqq 位置需要花费 c(p,q)c(p,q)c(p,q),问满足所有请求所需要的最小服务花费。N&lt;=1000,p∈[1,200]N &lt;= 1000, p\in[1,200]N<=1000,p∈[1,...原创 2019-03-14 19:28:33 · 242 阅读 · 0 评论 -
【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) D】Count The Bits【数位DP】
题意: 给定k与b,求出所有k在0~(2^b-1)范围内的倍数,将这些倍数二进制中的1求sum和,模1e9+9输出。思路: 首先,这是一个在数位上的dp,重点就在于如何描述每个数的状态。 发现数的范围很大,想要直接描述是不可能的。但是k的范围很小,只有1000,因此考虑存储这个数%k之后的值。 然后就可以列出dp方程...原创 2019-03-06 16:48:13 · 1439 阅读 · 0 评论 -
【POJ 3666】Making the Grade【线性DP】
题意:给定长度为N的序列A,构造一个长度为N的序列B,满足:1.B非严格单调,即B1 <= B2 <= ... <= BN 或 B1 >= B2 >= ... >= BN.2.最小化 S = (累加)| Ai - Bi |,只需要求出这个最小值S. 1 <= N <= 2000,1 <= | Ai | <= 1e9...原创 2018-08-15 21:01:26 · 279 阅读 · 0 评论 -
【区间dp】【Gym 100712L】01串切割问题 + 线段树优化
题意: 有一个01串,切割的规则为:①切割后的子串不能是 0101 或者 1010 这样交替的子串②切割后的子串长度不能超过 K 询问最少的切割次数 样例: 4 //4组数据 6 3 //原串长度为6,子串的最长长度为3 ...原创 2018-07-22 23:52:33 · 298 阅读 · 0 评论 -
【POJ1276】【多重背包】凑货币问题
题意:(直接看输入) 735 3 4 125 6 5 3 350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 10 10每行第一个数为需要凑出的货币,为total第二个数为有几种货币,为n接下来分别是该货币的数量,和该货币的面值,num[i] 与 v[i] 分...原创 2018-07-21 17:00:30 · 461 阅读 · 0 评论 -
POJ1015 Jury Compromise【背包问题】
题意: 选陪审团。n个候选人,选出m个人加入陪审团。辩方和控方会给n个人中的每一个人打分,分值0-20,辩方分值所加和为D,控方为P,要求 |D-P| 最小,如果方案不唯一,则选 D+P 最大的方案。 思路: 记 f[i][j] 为挑出 i 个人,分差为 j 时,总分值最大。 则 f[i][j] = max( f[i][j] , f[i-...原创 2018-07-21 01:03:34 · 199 阅读 · 0 评论 -
HDU - 2602(动态规划,01背包问题)
题意: 给定容积,怎样捡骨头可以让背包价值最高.(典型01背包问题)解题思路: dp[j]表示当背包装了j空间时的最大价值,采用滚动数组.下面是代码.#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int main(){...原创 2018-03-04 18:27:10 · 289 阅读 · 0 评论 -
POJ - 1458(最长公共子序列,动态规划)
题意: 给两个字符串,找到其中最长的公共子序列,输出长度.解题思路: 一开始想用滚动数组来做,然后无限被wa,放弃了...........(怀疑这题能不能用滚动数组,还是我太cai.........) 然后用二维数组做,dp[i][j]表示当a字符串长度为i,b字符串长度为j时的最长公共子序列长度. 来看动态转移方程if(a[i] == b[...原创 2018-03-04 17:46:59 · 705 阅读 · 0 评论 -
POJ - 2533(动态规划 —— 最长子序列)
题意: 给一串数字,找到其中最长的子序列,输出最长子序列的长度.如:1 7 3 5 9 4 8其中最长子序列为(1,3,4,8),长度为4.解题思路: 动态规划的难点就在于找到具有后效性的子问题.即一旦确定第i个状态,即可确定i+1状态. 因此该问题的子问题是用dp[i]表示以第i个数字为结尾的子序列的最长长度.下面是代码.#include <cst...原创 2018-03-04 16:19:03 · 286 阅读 · 0 评论 -
POJ - 1384 Piggy-Bank(完全背包)
题意: 有n种硬币,每种硬币有各自的重量w[i] 克和它对应的价值v[i]. 每种硬币可以无限使用.(完全背包问题) 已知一个储蓄罐中所有硬币的总重量正好为m克, 问你这个储蓄罐中最少有多少价值的硬币? 如果m克的情况不存在, 输出“This is impossible.”.解题思路: 动态规划问题,主要就是找到子问题,并且子问题有后效性.(即知道i的状...原创 2018-03-02 20:18:21 · 248 阅读 · 0 评论 -
【HDU 5965】扫雷【线性递推】
题意: 给一个3*N的矩阵,第一行和第三行可能会有地雷,第二行没有地雷,第二行每个格子上都有1个数,表示在以该格子为中心的九宫格中一共有几个地雷。 给出第二行每个格子上的数字,问安放地雷的方案。 思路: 乍一看不会。 然后再仔细想想,可以发现第一列的地雷数量决定了第二列的地雷数量,而第一列和第二列的数量决定了第三列的数量,由此可以进行...原创 2018-08-24 14:54:26 · 241 阅读 · 0 评论 -
【状压dp】【最短Hamilton路径】
题意: 给出n个点,然后给出每两个点之间的路径,要求找到一条最短的路径,从第1个点出发,到达最后一个点,中间所有的点都只经过一次,要求这条路径是最短的。这称为最短Hamilton路径。 思路: 因为n只有20个点,所以考虑状压dp,每一个状态由两个数据组成,一个是这个状态最后停在了哪个点,一个是这个状态之前走过了哪些路径。用f[1<<20][2...原创 2018-10-22 23:51:39 · 412 阅读 · 0 评论 -
【Codeforces Round #544 (Div. 3)】K Balanced Teams【线性DP】
题意: n个人,每个人都有各自的权值,组成若干个队伍,队伍数不能超过k,每支队伍中的任意两人的权值之差不能超过5,问每支队伍人数累加的最大值是多少?思路: 比赛的时候写了个贪心,然后wa on 53...就先放着写后面的题去了,写完后面两题以后,时间也结束了... 第一反应是dp,但是列出了三维的dp方程,dp[i][j][k]...原创 2019-03-09 00:15:36 · 276 阅读 · 0 评论 -
【16年浙江省赛 B ZOJ 3937】More Health Points【树上dfs、斜率优化dp、动态维护下凸壳】
题意: 给定一颗树,单向边,给出每个点的价值。然后任选树中一个点 i 进入,从 j 点出来,获得的价值为val[i]*1+val[i+1]*2+...+val[j]*(j-i+1),也可以选择不进入,节点价值有正有负,求最多可以获得多少价值。 思路: 这题可以简化成在一个序列上,找出一段 [x,y],求SUM(val[i]*(i-x+1))的最大值,即1*...原创 2019-02-26 10:14:42 · 517 阅读 · 0 评论 -
【BZOJ 2726】任务安排【斜率优化dp】
题意: n个需要被处理的任务,机器启动时间为s。每个任务都有时间Ti和花费Ci,计算方法为完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成,新的一批任务开始时,机器需要重新启动。确定一个分组方案,使得总费用最小。【每批任务包含相邻的若干任务】 思路: 1 <= n <= 3*1e5,0 <= S,Ci &l...原创 2019-02-26 09:48:57 · 222 阅读 · 0 评论 -
【HDU 1024】【线性DP】Max Sum Plus Plus
题意: 题目给出了一个含有n个数字的序列,要求将这个序列划为m段,要求这m段不能相交,不要求这m段要覆盖所有数字。求这m段数字之和的最大值。 思路: 比较容易发现是一个dp问题,令dp[i][j]为前i个数字,分为j段,第i个数字选的最大值。则dp[i][j] = max(dp[x][j-1]+a[i], dp[i-1][j]+a[i]),此处的dp[x][...原创 2019-02-14 15:54:13 · 166 阅读 · 0 评论 -
【14浙江省赛 B ZOJ 3777】Problem Arrangement 【状压dp】&& 【CCPC-Wannafly Winter Camp Day2 K Sticks】
题意:【浙江省赛】 给定n、m。有n个物品,进行全排列,然后p[i][j]表示第i个物品放在第j个位置所能得到的价值,现在开始对n个物品进行任意摆放,求第一次摆出一个排列,该排列的总价值大于或等于m的期望次数。 思路: 看到这题就回想起了之前做过的一个状压dp题目,12根木头,求最多能够摆出多少个三角形,于是从状压dp的角度切入思考这道题目。首先求期望次数就...原创 2019-02-18 12:15:42 · 230 阅读 · 0 评论 -
【 Codeforces Round #301 (Div. 2) D】Bad Luck Island【概率DP】
题意: 有x个石头,y个剪刀,z个布,求最后剩下石头、剪刀、布的概率. 思路: 一开始想的是正向遍历进行dp,dp[i][j][k][h]表示i个石头,j个剪刀,k个布,最后结果为h的概率,然后发现这个dp思路转移方程比较难写。 于是考虑反向dp,dp[i][j][k]表示剩余i个石头,j个剪刀,k个布的概率,最后将dp[x][0][0]累加起...原创 2019-02-22 17:31:19 · 166 阅读 · 0 评论 -
CCPC-Wannafly Winter Camp Day1 (Div2, onsite)【流流流动】
题目描述: 喜欢数学的 wls 最近被萎住了。 现在他一共有1...n这么多数字,取数字 i 会得到 f[i] 的收益。数字之间有些边,对于所有的 i (i != 1),若 i 为奇数,则 i 与3i+1 之间有边,否则 i 与 i/2 之间有边。如果一条边的两个顶点 xy 都被取了,那么会失去 d[min(x,y)] 的价值。请问 wls 怎么取,才能使得收益...原创 2019-02-02 14:42:46 · 297 阅读 · 0 评论