DP
文章平均质量分 62
DrCarl
重庆大学acm-icpc集训队队员
展开
-
POJ 2955 Brackets 【区间DP】
题目链接题意给一串包含中括号和小括号的字符串,求其括号匹配正常的顺序(不一定连续)子串中的(最长串)分析状态区间问题的一般处理方法:设dp[i][j]⇔与j间最长满足要求子串长度dp[i][j]\Leftrightarrow与j间最长满足要求子串长度状态转移方程如果这个区间两个端点的括号是匹配的,那么它可以是由去掉两端点的串加上2转移而来,比如([]) dp[i][j]=max(dp[i][j]原创 2016-05-25 16:50:03 · 692 阅读 · 0 评论 -
HDU-3480 Division 【DP+斜率优化(二维)】
题目链接题意定义一个集合的花费是这个集合中的最大值减最小值的平方。然后给定一个集合S,求对这个集合的一个覆盖,使得所有子集的花费和最小。分析本身这个题是非常简单的,只是今天看了别人的题解,我发现我以前写的二维斜率优化都写复杂了。直接外层循环用未被优化的那一维就行了,不用像我以前那样维护一个k维的单调队列……我说怎么不对劲,每次看别人的代码都那么短…… 具体见代码AC代码//HDU-3480 Div原创 2017-03-11 15:26:24 · 448 阅读 · 0 评论 -
HDU-2829 Lawrence 【斜率优化DP】【四边形不等式优化】
题目链接题意背景故事大概是说一战时一个英国间谍Lawrence要指挥突击队去炸毁奥斯曼帝国的一些铁轨。铁轨上有n个火车站,按线性排列,每个火车站上有一个权值,最后整个铁路的价值就是每一段联通铁路段上的火车站权值两两相乘的和加起来(联通段上只有一个车站就是0)。Lawrence有m次炸毁两个车站之间铁路的机会,求Lawrence最终可以使得这段铁路价值变成的最小值。分析转移方程易想出,设状态dp[i]原创 2017-02-26 15:31:41 · 796 阅读 · 0 评论 -
POJ-1180 Batch Scheduling 【逆向DP+斜率优化】
题目链接题意一台机器有N个物品要处理,每个物品的处理时间是Ti,花费系数是Fi,可以把这N个物品分包处理,打包需要花费时间S,机器每处理完一包物品就会把当前时间显示出来(刚开始处理时时间为0),那么这包中每个物品的花费就是显示的这个时间乘以其花费系数。求处理完所有物品的最小花费。分析朴素的想法设状态为处理前i个物品的最小花费,但是单考虑前i个物品的花费是有后效性的,因为每新增一个包它的开始时间是由前原创 2017-03-05 15:21:20 · 463 阅读 · 0 评论 -
POJ-1260 Pearls 【DP】
题目链接题意某公司需采购c种珍珠,知道每种珍珠的价格和需要的量。购买时,若要买某种珍珠,需额外支付10个该种珍珠的价钱。同时价格低的珍珠可以用价格高的珍珠代替。求最少能花多少钱完成采购。分析解决本题关键要想到这一点:若第i种珍珠可以被第j种珍珠代替(i< j且珍珠价格递增),则第i~j-1种珍珠都应当被第j种珍珠代替。证明很简单,这里省略。所以最终的采购的方式就是将整个珍珠种类的区间进行划分,每个划原创 2017-02-25 15:25:44 · 278 阅读 · 0 评论 -
CodeForces 449D Jzzhu and Numbers 【DP+容斥】
题意给定一个n元集,元素为aia_i,求其有多少个子集,使得其中的元素ai1,.....aika_{i1},.....a_{ik}满足 ai1&ai2&⋯&aik=0 a_{i1}\& a_{i2}\& \cdots \& a_{ik} = 0 (1⩽n,a⩽106) (1 \leqslant n,a \leqslant 10^6)分析要是n和a的范围小一些自然可以直接用01背包做,然而这里a与原创 2017-01-19 15:06:50 · 1034 阅读 · 0 评论 -
HDU 5800 To My Girlfriend 【DP】
题意有n个物品,每个物品的重量是aia_i,求以下式子: ∑ni=i∑nj=1∑nk=1∑nl=1∑sm=1f(i,j,k,l,m)(i≠j≠k≠l)\sum^n_{i=i} \sum^n_{j=1} \sum^n_{k=1} \sum^n_{l=1} \sum^s_{m=1} f(i,j,k,l,m) (i \neq j \neq k \neq l) 其中f(i,jk,l,m)f(i,jk,l原创 2017-01-19 10:04:17 · 594 阅读 · 0 评论 -
HDU 3401 Trade 【DP+单调队列优化】
题意给出接下来T天每天卖出、买入股票的价格,每天买入、卖出的上限,持有的股票的总上限,并且两次股票操作之间有时间间隔,求T天之后最多能赚多少钱。分析很容易可以写出状态转移方程: dp[i][j]↔第i天持有j的股票能获得的最大利益dp[i][j] \leftrightarrow第i天持有j的股票能获得的最大利益 dp[i][j]=max(dp[i−1][j],max(dp[pre][j+k]+B原创 2017-01-16 23:32:23 · 434 阅读 · 0 评论 -
POJ 3017 Cut the Sequence 【DP+单调队列优化+平衡树】
题意给定一串数列,要求把它划分成一些小段,每个小段的和不超过M,找到一种分段方法使得每一段的最大值的和最小,求这个最小值分析易得转移方程 dp[i]=min(dp[k]+max(num[k+1],⋯,num[i])) dp[i]=min(dp[k]+max(num[k+1], \cdots, num[i])) 其中∑ij=k+1num[j]<=M\sum^i_{j=k+1} num[j]<=M原创 2017-01-16 10:14:38 · 514 阅读 · 0 评论 -
CodeForces 342D Xenia and Dominoes 【DP+容斥】
题目链接题意在一个3*n的桌子上放一些1*2的多米诺骨牌(横竖放都可以),桌子上有一些不能放置的格子,除了这些不能放置的格子以外,还要求一个指定的格子不能被多米诺骨牌覆盖,同时这个空位可以通过移动附近的骨牌来转移到其他地方,剩下的格子要被全部覆盖,求放置的种数。分析先不管哪个预留的空位,对于一个已知的棋盘,一列一列转移状态。设状态: dp[i][maks]↔在第i列mask中的行被覆盖,并且前i−原创 2016-11-27 16:46:08 · 610 阅读 · 0 评论 -
LOJ 1422 Halloween Costumes【区间DP】
题目链接 题意给你连续几天开的party需要穿的衣服所对应的种类(用数字代表),接下来要去参加这些party,你可以选择穿一件新衣服并套在已有的衣服上,或者脱掉已有的几层衣服,但是脱下的衣服就不能再穿了。求参加完这些party最少需要准备多少套衣服。 分析状态考虑区间DP的一般处理方法,设状态dp[i][j]⇔参加第i天到第j天需要准备的最少的衣服数dp[i][j]\Leftrightarr原创 2016-05-19 16:58:39 · 405 阅读 · 0 评论 -
LightOJ 1017 Brush (III) 【DP】
题目链接题意墙上有N个污点,知道它们的坐标(xi,yi)。现有一把宽度为w的刷子,将刷子固定在一个高度就可以沿着平行于x轴的方向刷除污点。总操作次数最多为k,求最多能够刷除掉多少污渍分析我们以刷子底部的y坐标来刻画刷子的位置。首先既然刷子会沿着平行x轴的方向刷出这个高度所有的污点,那么可以不管污点的x坐标。 先预处理一下,把污点高度从大到小排个序(因为我们是以刷子的下部作为刷子的位置,那么刷高处的原创 2016-08-09 15:31:15 · 683 阅读 · 0 评论 -
POJ 3666 Making the Grade 【DP+离散化】
题目链接题意有N个平台,它们的高度分别为Ai。先想把这些平台的高度变得非严格单调,改变一个平台的高度的花费就是高度的改变量,问最小的花费是多少。分析定义状态: dp[i][j]↔前i个平台高度变成单调递增并且第i个平台高度为j所需的最少花费dp[i][j] \leftrightarrow 前i个平台高度变成单调递增并且第i个平台高度为j所需的最少花费 所以状态转移:dp[i][j]=max(dp[原创 2016-08-09 14:59:42 · 335 阅读 · 0 评论 -
HDU 1058 Humble Numbers 【DP】
题目链接题意定义“Humble Numbers”是素因子只含有2,3,5,7的数,求第n个Humble Number是多少。分析显然直接求出某个范围以内所有的humble Numbers,关键是如何枚举才能保证枚举出来的数是递增的。 这里用DP来实现,记录当前没有乘以某个因子中的最大数再乘以这个因子得到的数中的最小值,这样说很抽象,看代码: while(m<=5842) {原创 2016-08-09 14:21:11 · 298 阅读 · 0 评论 -
LightOJ 1013 Love Calculator 【DP(LCS变形)】
题目链接题意给两个字符串,求长度最短的字符串的长度以及个数,使得给出的两个串都是这个串的子串。分析LCS的变形,首先长度自然是len(s1)+len(s2)-len(LCS)。关键是有多少个这样的字符串。现在知道有两种DP的方法。方法一(三维DP)设状态: dp[i][j][k]↔由s1的前j个字符和s2的前k个字符组成的长度为i的目标串的个数dp[i][j][k] \leftrightarrow原创 2016-08-09 16:51:22 · 490 阅读 · 1 评论 -
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest Problem J 【二分+DP+单调队列】
题目链接题意有n个地铁站,全部成线性排列,有n-1种地铁票,第i种地铁票的价格为p_i,并且能坐i站(也就是在第k个站能够到达[k-i,k+i]中的站)。现在想从起点站坐到终点站,地铁在相邻两个站之间运行花费1s(这里原文是“get from a stop to the next one in just one minute.”有歧义,坑了好久),给出在每个站出来又进去花费的时间,并且从一个站出来又原创 2016-09-11 15:04:47 · 1016 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome 【区间DP】
题目链接题意给你一串字符串,并给出添加以及删除(在任意位置)每种字符的花费,问把这个字符串变成回文串所需的最少花费分析经典的区间DP状态设 dp[i][j]⇔将子串S(i,j−1)变成回文串的最小花费dp[i][j]\Leftrightarrow 将子串S(i,j-1)变成回文串的最小花费习惯设成前闭后开区间状态转移方程如果当前子串最前面和最后面的字符本来就相同,当前的最小花费就等于里面的子串的最原创 2016-08-02 21:37:35 · 342 阅读 · 0 评论 -
LightOJ 1021 Painful Bases 【状压DP+数位DP】
题目链接题意求由一些B进制的数的全排列中能被K整除的数的个数分析题中B最高达到16,直接枚举排列显然不可能。考虑数位DP,但同时取得每个数要不同,所以需要记录用过哪些数,因此要用到状压DP状态dp[S][r]↔用了数集{S}中的数后除以K余数为r的数的个数 dp[S][r] \leftrightarrow 用了数集\{S\}中的数后除以K余数为r的数的个数转移方程dp[S][r]=∑a∈{S}dp[原创 2016-08-04 18:21:43 · 421 阅读 · 0 评论 -
HDU-3045 Picnic Cows 【DP+斜率优化】
题目链接题意有N只奶牛,每只奶牛有一个满意度,如果把一些奶牛分到一个组内,那么这些奶牛的满意度都会下降到组中满意度的最小值。现在规定每个组至少T只奶牛,求总的满意度变化的最小值分析从这个题中我学到了斜率DP中规定了转移距离的最小值时的处理方法(也就是i必须从小于等于i-T的状态转移而来) 状态不难想出,先对奶牛的满意度排个序,设dp[i]为前i只奶牛分好组后的满意度下降最小值,显然有: dp[i原创 2017-03-11 16:31:12 · 420 阅读 · 0 评论