![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
动态规划
Mr_Kingk
这个作者很懒,什么都没留下…
展开
-
背包问题(完整版:背包九讲)
1、01背包问题:https://blog.csdn.net/Mr_Kingk/article/details/1039648372、完全背包问题:https://blog.csdn.net/Mr_Kingk/article/details/1040107093、多重背包问题(三个版本链接):https://blog.csdn.net/Mr_Kingk/article/details/10...原创 2020-02-01 17:23:25 · 563 阅读 · 0 评论 -
2020牛客国庆七天乐day02 CHEAP DELIVERIES(最短路+状压dp)
链接:https://ac.nowcoder.com/acm/contest/7818/B来源:牛客网题目描述Abu runs a delivery service where he deliver items from one city to another. As with any business, Abu wants to decrease his cost as much as possible. The further he travel, the more fuel he wil.原创 2020-10-15 00:55:00 · 1136 阅读 · 0 评论 -
计数问题(数位dp)
给定两个整数 a 和 b,求 a 和 b 之间的所有数字中0~9的出现次数。例如,a=1024,b=1032,则 a 和 b 之间共有9个数如下:1024 1025 1026 1027 1028 1029 1030 1031 1032其中‘0’出现10次,‘1’出现10次,‘2’出现7次,‘3’出现3次等等…输入格式输入包含多组测试数据。每组测试数据占一行,包含两个整数 a 和 b。当读入一行为0 0时,表示输入终止,且该行不作处理。输出格式每组数据输出一个结果,每个结果原创 2020-05-29 17:42:44 · 699 阅读 · 0 评论 -
折叠序列(区间dp&&输出具体方案)
比尔正在试图用折叠重复子序列的方式紧凑的表示由大写字母’A’到’Z’组成的字符序列。例如,表示序列AAAAAAAAAABABABCCD的一种方式是10(A)2(BA)B2(C)D。他通过以下方式定义了折叠的字符序列以及它们的展开变换:1、包含带个字符的序列被认为是折叠序列,展开它得到的序列为它本身。2、如果S和Q是两个折叠序列,并且S可以展开得到S’,Q可以展开得到Q’,则认为SQ也是一个折叠序列,并且SQ展开得到S’Q’。3、如果S是折叠序列,则X(S)也是折叠序列,其中X为大于1的整原创 2020-05-17 18:03:07 · 824 阅读 · 0 评论 -
旅行(dpLCS所有方案并输出)
爱丽丝和鲍勃想去旅行。他们每个人制定了一条旅行路线,每条路线包含一个按给定顺序访问的城市列表,一个城市可能会多次出现在同一路线中。因为他们想要一起去旅行,所以必须在旅行路线上达成一致。他们两个都不想改变他们的路线上的城市顺序或者在路线上额外添加城市。因此,他们只能移除各自路线中的一些城市,使得旅行路线达成一致,并且尽可能的长。该地区共有26个城市,用小写字母’a’到’z’表示。输入格式输入包含两行,第一行是爱丽丝的路线城市列表,第二行是鲍勃的路线城市列表。每个列表由1到80个原创 2020-05-16 17:23:36 · 503 阅读 · 0 评论 -
低买(dp最长递减子序列长度&&统计方案数:o(n^2))
给定一段时间内股票的每日售价(正16位整数)。你可以选择在任何一天购买股票。每次你选择购买时,当前的股票价格必须严格低于你之前购买股票时的价格。编写一个程序,确定你应该在哪些天购进股票,可以使得你能够购买股票的次数最大化。例如,下面是一个股票价格时间表: Day 1 2 3 4 5 6 7 8 9 10 11 12Price 68 69 54 64 68 64 70 67 78 62 98 87如果每次购买都必须遵循当前股票价格严格低于之前购买股票时的价格原创 2020-05-16 15:56:45 · 284 阅读 · 0 评论 -
花店橱窗(线性dp&&输出具体方案)
小q和他的老婆小z最近开了一家花店,他们准备把店里最好看的花都摆在橱窗里。但是他们有很多花瓶,每个花瓶都具有各自的特点,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果。为了使橱窗里的花摆放的最合适,他们得想个办法安排每种花的摆放位置。可是因为小q和小z每天都太忙,没有时间设计橱窗里花的摆法,所以他们想让你帮他们求出花摆放的最大美观程度和每种花所放的位置。每种花都有一个标识,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有的花束在放入花瓶时必须保持其标识数的顺序,原创 2020-05-15 18:46:54 · 768 阅读 · 1 评论 -
月之谜(记忆化搜索&&数位dp)
如果一个十进制数能够被它的各位数字之和整除,则称这个数为“月之数”。给定整数L和R,你需要计算闭区间[L,R]中有多少个“月之数”。输入格式输入占一行,包含两个整数L和R。输出格式输出一个整数,表示月之数的个数。数据范围1≤L,R<231输入样例:1 100 输出样例:33 思路:题目意思很简单,就是让统计一下[l,r]中能被各位数字之和整除的数(月之数)的个数。因为数位dp可以统计出小于等于当前数n的所有数(1-n)中的满足条件的数的个数,记原创 2020-05-14 17:19:30 · 488 阅读 · 0 评论 -
启示录(二分+数位dp)
古代人认为666是属于魔鬼的数。不但如此,只要某数字的十进制表示中有三个连续的6,古代人也认为这是个魔鬼的数,比如666,1666,6663,16666,6660666等等。古代典籍中经常用“第X小的魔鬼的数”来指代这些数,这给研究人员带来了极大的不便。现在请编写一个程序,可以实现输入X,输出对应的魔鬼数。输入格式第一行包含整数T,表示共有T组测试数据。每组测试数据占一行,包含一个整数X。输出格式每组测试数据占一行,输出一个魔鬼数。数据范围1≤T≤1000,1≤X≤原创 2020-05-13 21:21:18 · 493 阅读 · 0 评论 -
杰拉尔德和巨型象棋(计数类dp(逆元+费马小定理+组合数))
给定一个 H*W 的棋盘,棋盘上只有 N 个格子是黑色的,其他格子都是白色的。在棋盘左上角有一个卒,每一步可以向右或向下移动一格,并且不能移动到黑色格子中。求这个卒从左上角移动到右下角,一共有多少种路线。输入格式第一行包含三个整数H,W,N。接下来N行,每行包含两个整数x,y,描述一个黑色格子位于x行y列。数据保证左上角和右下角的格子都是白色的。输出格式输出一个整数表示结果对109+7取模后的值。数据范围1≤H,W≤105,1≤N≤2000输入样例1:3原创 2020-05-12 21:13:04 · 298 阅读 · 0 评论 -
任务安排2(斜率优化dp)
有 N 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变。机器会把这 N 个任务分成若干批,每一批包含连续的若干个任务。从时刻0开始,任务被分批加工,执行第 i 个任务所需的时间是Ti。另外,在每批任务开始前,机器需要 S 的启动时间,故执行一批任务所需的时间是启动时间 S 加上每个任务所需时间之和。一个任务执行后,将在机器中稍作等待,直至该批任务全部执行完毕。也就是说,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数Ci。请为机器规划一个分..原创 2020-05-08 21:27:32 · 293 阅读 · 0 评论 -
围栏(dp&&单调队列)
有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 i 个木匠要么不粉刷,要么粉刷包含木板Si的,长度不超过LiLi的连续的一段木板,每粉刷一块可以得到Pi的报酬。不同工匠的Si不同。请问如何安排能使工匠们获得的总报酬最多。输入格式第一行包含两个整数N和M。接下来M行,每行包含三个整数Li,Pi,SiLi,Pi,Si。输出格...原创 2020-05-05 21:18:50 · 256 阅读 · 0 评论 -
赤壁之战(dp&&树状数组)
给定一个长度为N的序列A,求A有多少个长度为M的严格递增子序列。输入格式第一行包含整数T,表示共有T组测试数据。每组数据,第一行包含两个整数N和M。第二行包含N个整数,表示完整的序列A。输出格式每组数据输出一个结果,每个结果占一行。输出格式为“Case #x: y”,x为数据组别序号,从1开始,y为结果。由于数据可能很大,请你输入对109+7取模后的结果。数据范...原创 2020-05-04 20:45:48 · 328 阅读 · 0 评论 -
清理班次(dp&&线段树)
农民约翰正在指挥他的N头牛进行清理工作。他将一天划分为了T个班次(1~T)。每头牛都只能在一天中的某一个时间段内进行不间断的工作。你需要帮助约翰排列出一个合理的奶牛的清理班次,使得每个班次都有奶牛在进行清理,而且动用的奶牛数量可以尽可能的少。输入格式第1行:两个空格隔开的整数N和T。第2..N+1行:第i+1行包含两个整数,分别表示第i头牛可以进行工作的开始时间和结束时间。...原创 2020-05-03 21:09:41 · 186 阅读 · 0 评论 -
计算重复(倍增优化dp)
定义conn(s,n)conn(s,n)为 n 个字符串 s 首尾相接形成的字符串,例如:conn(“abc”,2)=”abcabc”称字符串 a 能由字符串 b 生成,当且仅当从字符串 b 中删除某些字符后可以得到字符串 a。例如“abdbec”可以生成“abc”,但是“acbbe”不能生成“abc”。给定两个字符串s1和s2,以及两个整数n1和n2,求一个最大的...原创 2020-05-03 18:36:43 · 365 阅读 · 0 评论 -
蒙德里安的梦想(状态压缩dp)
求把N*M的棋盘分割成若干个1*2的的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。如下图所示:输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数N和M。当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。输出格式每个测试用例输出一个结果,每个结果占一行。数据范围1≤N,M≤11输入...原创 2020-04-30 20:47:01 · 291 阅读 · 0 评论 -
坏掉的机器人(后效性处理&&高斯消元)
给定一张 N*M 的棋盘,有一个机器人处于(x,y)位置。这个机器人可以进行很多轮行动,每次等概率地随机选择停在原地、向左移动一格、向右移动一格或向下移动一格。当然机器人不能移出棋盘。求机器人从起点走到最后一行的任意一个位置上,所需行动次数的数学期望值。输入格式第一行包含两个整数 N 和 M。第二行包含两个整数 x 和 y,表示机器人的初始位置。设定棋盘左上角为(1,1...原创 2020-04-29 21:06:33 · 446 阅读 · 0 评论 -
休息时间(dp环状结构)
在某个星球上,一天由 N 个小时构成,我们称0点到1点为第1个小时、1点到2点为第2个小时,以此类推。在第 i 个小时睡觉能够恢复UiUi点体力。在这个星球上住着一头牛,它每天要休息B个小时。它休息的这B个小时不一定连续,可以分成若干段,但是在每段的第一个小时,它需要从清醒逐渐入睡,不能恢复体力,从下一个小时开始才能睡着。为了身体健康,这头牛希望遵循生物钟,每天采用相同的睡觉计划。...原创 2020-04-28 17:29:41 · 345 阅读 · 0 评论 -
选课(背包类树形dp)
学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了 N 门的选修课程,每个学生可选课程的数量 M 是给定的。学生选修了这 M 门课并考核通过就能获得相应的学分。在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修。例如《Windows程序设计》必须在选修了《Windows操作基础》之后才能...原创 2020-04-25 18:57:01 · 392 阅读 · 0 评论 -
没有上司的舞会(树形dp)
Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数HiHi给出,其中1≤i≤N1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。接...原创 2020-04-25 16:53:05 · 365 阅读 · 0 评论 -
多边形(化环为链&&区间dp)
“多边形游戏”是一款单人益智游戏。游戏开始时,给定玩家一个具有N个顶点N条边(编号1-N)的多边形,如图1所示,其中N = 4。每个顶点上写有一个整数,每个边上标有一个运算符+(加号)或运算符*(乘号)。第一步,玩家选择一条边,将它删除。接下来在进行N-1步,在每一步中,玩家选择一条边,把这条边以及该边连接的两个顶点用一个新的顶点代替,新顶点上的整数值等于删去的两个顶点上的数按...原创 2020-04-24 18:02:42 · 367 阅读 · 0 评论 -
石子合并(区间dp)
设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价...原创 2020-04-24 16:22:25 · 530 阅读 · 1 评论 -
陪审团(01背包问题&&倒推具体方案)
在一个遥远的国家,一名嫌疑犯是否有罪需要由陪审团来决定。陪审团是由法官从公民中挑选的。法官先随机挑选N个人(编号1,2…,N)作为陪审团的候选人,然后再从这N个人中按照下列方法选出M人组成陪审团。首先,参与诉讼的控方和辩方会给所有候选人打分,分值在0到20之间。第 i 个人的得分分别记为p[i]和d[i]。为了公平起见,法官选出的M个人必须满足:辩方总分D和控方总分P的差的绝对...原创 2020-04-24 15:28:38 · 329 阅读 · 0 评论 -
自然数拆分(完全背包问题求方案数)
给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。注意:拆分方案不考虑顺序; 至少拆分成2个数的和。求拆分的方案数 mod 2147483648的结果。输入格式一个自然数N。输出格式输入一个整数,表示结果。数据范围1≤N≤4000输入样例:7输出样例:14思路:将一个数差分成若干个数,很显然其中某些数可能...原创 2020-04-22 19:30:02 · 3127 阅读 · 0 评论 -
数字组合(01背包问题求方案数)
给定N个正整数A1,A2,…,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案。输入格式第一行包含两个整数N和M。第二行包含N个整数,表示A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1≤N≤100,1≤M≤10000,1≤Ai≤1000输入样例:4 41 1 2 2输出样例:3思路:这个问题可以转化为...原创 2020-04-22 18:58:01 · 4715 阅读 · 0 评论 -
最长公共上升子序列(dp,前缀最值)
熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。小沐沐说,对于两个数列A和B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升...原创 2020-04-18 20:42:14 · 282 阅读 · 0 评论 -
杨老师的照相排列(dp分析法)
有N个学生合影,站成左端对齐的k排,每排分别有N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk)第1排站在最后边,第k排站在最前边。学生的身高互不相同,把他们从高到底依次标记为1,2,…,N。在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。问一共有多少种安排合影位置的方案?下面的一排三角矩阵给出了当N=6,k=3,N1=3,N2=2,N3=1...原创 2020-04-18 20:25:07 · 541 阅读 · 0 评论 -
最大的和(最大子矩阵和:贪心&&前缀和+dp)
给定一个包含整数的二维矩阵,子矩形是位于整个阵列内的任何大小为1 * 1或更大的连续子阵列。矩形的总和是该矩形中所有元素的总和。在这个问题中,具有最大和的子矩形被称为最大子矩形。例如,下列数组:0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 其最大子矩形为:9 2 -4 1 -1 8 它拥有最大和15。输入格式输入...原创 2020-02-22 16:58:23 · 480 阅读 · 0 评论 -
最短Hamilton路径(二进制&&状态压缩dp)
给定一张n个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点ii到jj的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] ...原创 2020-02-10 18:26:34 · 177 阅读 · 0 评论 -
Football(概率dp+按位亦或运算的应用)
题目:POJ 3701DescriptionConsider a single-elimination football tournament involving 2nteams, denoted 1, 2, …, 2n. In each round of the tournament, all teams still in the tournament are placed in a ...原创 2020-02-10 17:04:34 · 371 阅读 · 0 评论 -
从1到n整数中1出现的次数(数位dp :o(logn))
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。样例输入: 12输出: 5思路;用数位dp统计一个数的每一位对“1”出现次数的贡献次数,具体可以分类讨论,假设当前数字为x,x左边的数为left,右边的数为right,这三部分构成n。(如当前数字为4,4左边的数为...原创 2020-02-07 17:02:15 · 602 阅读 · 0 评论 -
Strategic game(树形dp)
题目:POJ 1463DescriptionBob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem...原创 2020-02-09 17:48:39 · 237 阅读 · 0 评论 -
洛谷P1880 [NOI1995]石子合并(区间dp模板)
题目描述在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.输入格式数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.输出格式输出共2行,第1行为最小得分,第2行为最大得...原创 2019-10-01 21:06:29 · 207 阅读 · 0 评论 -
洛谷P1220 关路灯(区间dp)
题目描述某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始...原创 2019-11-17 21:12:05 · 174 阅读 · 0 评论 -
Palindrome(线性dp+(%2滚动数组):求使字符串变成回文的需插入的字符的最小个数)
题目:POJ 1159DescriptionA palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, d...原创 2020-02-09 16:20:25 · 174 阅读 · 0 评论 -
Common Subsequence(最长公共子序列:o(n^2))
题目:POJ1458思路:用dp[i][j]表示第一个字符串s1的前i个字符组成的子串和第二个字符串s2的前j个字母组成的子串的最长公共子序列长度。当上一个状态s1[i-1]=s2[j-1]时,dp[i][j]=dp[i-1][j-1]+1;(当前位置对应字符相等,则最长公共子序列等于上一状态的最长公共子序列长度+1);否则,dp[i][j]=max(dp[i-1][j],dp[i][...原创 2020-02-08 20:08:50 · 356 阅读 · 0 评论 -
Maximum sum(线性dp:求最大不相交子段和:o(n))
题目:POJ2479思路:用两个数组l[i]和r[i]分别表示从左边到和从右边到i号位置的最大子段和,分别从左到右和从右到左遍历一遍即可,如果上一位置保存结果为正数,则当前最优解为上一位置最优解+当前数,否则,当前最优解为当前数(从当前位置重新开始累加,分段)(因为这时如果当前数再加上个结果相当于加了个负数,一定比当前数小),然后再遍历一遍取前缀和后缀最大为到当前位置的最大和(因为拿前缀来说,...原创 2020-02-08 18:01:30 · 324 阅读 · 0 评论 -
洛谷P1280 尼克的任务(简单线性dp)
题目描述尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开...原创 2019-08-29 18:05:44 · 272 阅读 · 0 评论 -
洛谷P1020 导弹拦截(dp+二分优化)
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是\le 50000≤50000的正整数),计算这套系统最多能拦截多少导弹...原创 2019-08-05 19:13:10 · 211 阅读 · 0 评论 -
洛谷P2516 [HAOI2010]最长公共子序列(dp+滚动数组)
题目描述字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij = yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的...原创 2019-08-16 21:17:40 · 377 阅读 · 0 评论