====DP====
文章平均质量分 76
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
HDU 5945 Fxx and game 单调队列||bfs
传送门:HDU5945题意:给定3个数x,k,t,和两种操作1) x=x-i;02) if x|k x=x/k;问最少经过多少步能将x变为1,输入保证x能变为1.比赛的时候看这题的想法是广搜,但是第一次交MLE,一顿xjb改以后又交了一次,竟然过了,就没再多想,结果终测还是MLE。。后来看题解大多数都是用dp+单调队列做的,但是bfs也不是不可以,不过要加一个标记数组。把原创 2016-11-03 21:50:40 · 295 阅读 · 0 评论 -
POJ - 3616 Milking Time DP(区间的最大权独立集)
传送门:POJ3616题意:给出n个带权区间,要求从这n个区间中选取一个元素互不相交的子集,使得子集元素的权重和最大。思路:我自己的思路是dp[i]表示右端点小于等于i的所有区间所能得到的最大权重,然而因为按左端点排序排习惯了wa了好久。。代码:#include#include#include#define ll long long#define pb push_back原创 2017-07-21 21:10:32 · 452 阅读 · 0 评论 -
POJ - 1065 Wooden Sticks DP(LIS)|| 贪心
传送门:POJ 1065题意:要处理n个长为li,宽为wi的木棍,若处理完(li, wi)后接着处理(li', wi')且满足li' >= li, wi' >= wi 则不花费时间,否则花费1单位时间,问处理完n根木棍最少花费多长时间。思路:一开始想着贪心来着,谁让这是dp系列的题呢,就没敢写,没想到贪心还真能解。。解法一:利用Dilworth定理将本题转化为LIS问题,有关Dilwo原创 2017-07-22 14:53:55 · 308 阅读 · 0 评论 -
CodeVS 2075 yh女朋友的危机 贪心 + DP
传送门:CodeVS 2075题意:中文题。思路:先按总身高排个序(ai + bi),然后做dp。dp[i] := 救出i个人后剩余的(坑内的)最大∑a。至于为什么要贪心的先救总身高小的,我也证明不太了,但是我可以证明单纯先救身高矮的或者手长的都会wa。。代码:#include#define ll long long#define pb push_back#defin原创 2017-07-31 14:36:19 · 208 阅读 · 0 评论 -
POJ - 1631 Bridging signals DP(LIS)
传送门:POJ 1631题意:这个题题意不好懂,不过看图就能明白了,就是让你去掉最少的线段,使得所有的线段都不想交。思路:将线段用点对表示,左端点为一个递增的序列1,2,3....n,右端点是一个1-n的排列,不难发现在这样情况下若要不相交,则左端点比前面大的线段的右端点一定也比前面的线段大,即在右端点的排列中找一个最长的递增子序列,转化为LIS求解。其实对着样例看也能看出是最长上升子原创 2017-07-22 21:25:10 · 203 阅读 · 0 评论 -
POJ - 3666 Making the Grade DP
传送门:POJ3666题意:给定一个序列Ai,要求将其变成一个非递减或者非递增序列Bi,花费为∑ |Ai - Bi|,问最小花费是多少。思路:首先我们明确如果需要将Ai改变,那么Ai要么变成Ai+1要么变成Ai-1,否则就不变,这样一定是最优的。我证明不了,不过可以自行举几个例子模拟一下改变过程就知道了。因此,Bi中的数必定都属于Ai,既然有了Bi的范围集合,那么我们就可以dp转移了,原创 2017-07-22 21:49:15 · 232 阅读 · 0 评论 -
Codeforces 834D The Bakery 线段树优化DP
传送门:Codeforces 834D题意:给定一个序列,将其分成k段,每段的值定义为其中不同数的个数,问怎么分能使总值最大。思路:dp[i][j]表示将前j个数分成i段能得到的最大值。显然dp[i][j] = max(dp[i - 1][k - 1] + num[k, j])(1暴力枚举的话是k * n^2的,显然不行,考虑优化取max的过程,可以用线段树维护,记录每个数和它前一个数原创 2017-08-01 01:58:47 · 324 阅读 · 0 评论 -
Aizu - 2200 Mr. Rito Post Office floyd + dp(好题)
传送门:AOJ 2200题意:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处。而且岛上只有一条船,下次想走水路还是得回到X处才行;两个镇子之间可能有两条以上的水路或旱路;邮递员必须按照清单上的镇子顺序送快递(镇子可能重复,并且对于重复的镇子不允许一次性处原创 2017-07-24 17:02:51 · 407 阅读 · 0 评论 -
POJ 3691 DNA repair AC自动机 + dp
传送门:POJ3691题意:给定一个原字符串S和n个禁止模式串p1,p2...pn,请修改字符串S,使得其中不包含任何禁止模式串,只能将S中的字符修改为其他字符而不能增加或删除,如果怎么修改都不行,输出-1,否则输出最少修改次数。思路:挑战程序设计P370例题,但是白书上不是用ac自动机做的,而是暴力预处理,我看网上dalao都是ac自动机或者说Trie图预处理,就学着写了一发,这也是第一原创 2017-08-02 16:34:42 · 349 阅读 · 0 评论 -
HDU 6078 Wavel Sequence 计数dp(思维)
传送门:HDU6078题意:给出两个序列A和B,让你找出两组等长下标序列f和g,使得对于每个i,Afi == Bgi ,并且Afi序列为波浪序列。 问能找出多少种这样的下标序列。波浪序列定义: a1a2>a3a4>a5a6 a1 a3 a5 思路:先贴上官方题解:设f_{i,j,k}fi,j,k表示仅考虑a[1..i]a[1..i]与b[原创 2017-08-05 18:10:51 · 285 阅读 · 0 评论 -
HDU - 5773 The All-purpose Zero LIS变形
传送门:HDU5773题意:给定一个序列,可以将0替换成任意数,在此基础上求最长递增子序列(严格递增)。思路:最优情况肯定是用掉所有的0,因为无论是用0去替换值还是用0去增长递增序列,都不会使得情况更差。知道了这一点,我们可以先把所有的0提出来,那么剩下的数应该对应减去其前面0的个数,这样做出来最长递增子序列以后,再把数减少的值加回去,所有0重新插进去(替换成相应的数),就会是满足题意原创 2017-09-03 21:18:08 · 175 阅读 · 0 评论 -
51nod 1524 可除图的最大团 dp
传送门:51nod1524题意:中文题。思路:我竟然还想建图搞。。正解:设dp[i]代表以i为最小点权的最大团的大小,根据最大团及可除图的性质容易得到转移方程:dp[i] = max(dp[j] + 1) 其中 i | j。代码:#include#include#define ll long long#define inf 0x3f3f3f3fusing names原创 2017-08-28 18:10:37 · 260 阅读 · 0 评论 -
HDU - 5816 Hearthstone 状压DP + 组合计数
传送门:HDU5816题意:牌堆里有两种卡牌,使用A牌能从牌堆摸2张牌,使用B牌能对对方造成 b[i] 点伤害。开始的时候从牌堆摸一张牌,问你能对敌方造成p点或以上伤害的概率是多少。 首先要注意计算所有的可能手牌状态,假设抽到过x张A牌,那么手里最多有x+1张B牌,并且当手里有x+1张B牌的时候就无法继续抽牌了(因为这时所有的A牌都应该被用掉了),否则就能继续抽牌。思路1:状压DP,d原创 2017-09-06 18:04:20 · 291 阅读 · 0 评论 -
HDU 6199 gems gems gems dp(逆推)
传送门:HDU 6199题意: 两个人轮流拿物品,每一个物品都有一个价值,第 i 次拿 k 个那么 第 i + 1 次 可以拿 k 或者 k + 1 个。Alice想让价值差最大,Bob想让价值差最小,Alice先手,问最后差是多少。思路:来自大牛:点击打开链接Orz取膜用&(2的幂次)优化也是个小技巧,要记住。比赛时还以为是博弈。。dalao们都好熟练啊。。代码:#in原创 2017-09-13 00:07:53 · 499 阅读 · 3 评论 -
CodeForces - 859C Pie Rules DP(逆推)(思维好题)
传送门:Codeforces 859c题意:有n个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取最优的策略,问最后各能获得的最大价值是多少。思路:考虑dp求解,要明确dp的状态只与是否有令牌有关,而与令牌在谁手里无关,因为不论令牌在谁手里,那个人都会尽可能的原创 2017-09-20 23:20:35 · 2602 阅读 · 0 评论 -
2015-2016 Northwestern European Regional Contest (NWERC 2015) 补题
C.Cleaning Pipes题意:给出n条管道(线段),任意两个管道之间之多有一个交点,忽略一个管道头部和其他管道的交点,问能否选出一个不相交的管道集合来使得所有交点都被这些管道覆盖。思路:将管道抽象成点,两个管道的交点抽象成边,那么问题转化成判断新建的图是否是一个二分图。判断二分图最常用的方法就是染色法,本题当然也就可以用,然而我看dalao的代码还学了另一种方法:利用并查集判断原创 2017-10-08 23:12:37 · 387 阅读 · 0 评论 -
POJ - 2385 Apple Catching dp
传送门:POJ2385题意:有两颗苹果树,每分钟会从其中某一颗苹果树上掉下一个苹果来,初始在1号树下,可以在树间移动而不花费时间,但是最多移动w次,问最多能接到多少个苹果。思路:很明显的我们可以根据移动次数奇偶判断在哪颗树下,用dp[i]表示移动i次最多能接到多少苹果,然后对每一个掉下来的苹果进行O(w)的状态转移就好了。代码:#include#include#define l原创 2017-07-21 20:34:31 · 235 阅读 · 0 评论 -
POJ - 2229 Sumsets 计数dp
传送门:POJ2229题意:用1,2,4,8这样的2的幂次数去组成n,问有多少种不同的组成方案。思路:打眼一看这不是完全背包裸题么,写完还真a了,不过总感觉事情没那么简单,一看discuss果然不出我所料。。解法一:完全背包。解法二:递推,分析如下:1. 当 n 为奇数时, f[n] = f[n-1], 因为只需在所有的序列前添加一个 1 即可, 所有的序列同时延迟 1原创 2017-07-21 20:17:28 · 201 阅读 · 0 评论 -
Codeforces 822 D. My pretty girl Noora 数学+dp
传送门:Codeforces 822D题意:一场比赛有N个人,可以分成N/x,每组x人。每组的比较次数为x(x-1)/2,每组最后胜出一个人进行下一轮比赛,直到最后只剩一个人,f[N]为最后决出冠军所需的比较次数,可以通过改变x的值使f[N]改变。题目给出t,l,r。求 t^0*f(l)+t^1*f(l+1)+……+t^(r-l)*f(r) 的最小值。思路:想到了每组内的人数越少越好(应该原创 2017-07-09 20:57:24 · 294 阅读 · 0 评论 -
codeforce 374C. Journey(dp)
传送门:C. Journey。这是一个典型的图论里的题目,解法和Bellman-Ford算法很类似,题意要求从第一个点开始在规定时间内到达最多的点,而且最后一定要在n点(题目保证在规定时间内能到达n点),用dfs的话会超时,所以应该用dp。设dp[i][j]表示经过i个点到达j点所用的最小时间,则题意变成在dp[i][n]里找最大的i就好了,外层循环遍历i的可能取值,内层循环遍历所有的边,原创 2016-10-08 12:04:17 · 317 阅读 · 0 评论 -
Constructing Roads In JGShining's KingdomHDU1025
传送门:HDU1025题意:抽象出来就是给你两条线,线上有许多点,然后给定点对之间能连线,但是连线不能交叉,问最多连多少条线。再抽象一层的话其实就是最长递增子序列。但这个题数据量稍大,传统的O(N^2)复杂度过不了,就需要使用一种O(NlogN)的方法了,但是要注意这种方法只能求最长上升子序列的长度而无法求出序列,因为它采用的是一种转化替代的思想,具体思想个人感觉只可意会不可言传,可以原创 2017-01-15 19:52:20 · 171 阅读 · 0 评论 -
HDU2062 Subset sequence
传送门:HDU2062题意:给你一个数n,问从1到n的数字排序,字典序第m个是多少,例如:n=2时字典序序列为(1)(1,2)(2)(2,1)解法:这题我几乎是纯看的题解。。自己一点思路也没有,其实也怪自己太浮躁,一遇到点稍难的题目就光想着去搜题解,就认为自己想不出来,实际上根本不深入去想,这是个致命的缺点啊,一定要改!附上大神解题思路: Problem Analyse原创 2017-01-15 21:51:56 · 219 阅读 · 0 评论 -
蓝桥杯 合并石子 DP+四边形不等式优化
算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。输入格式 输入第一行包含一个整数n,表示石子的堆数。 接下来一行,包含n个整数,按顺序原创 2017-02-12 21:12:46 · 2744 阅读 · 2 评论 -
POJ 1837 Balance DP好题
传送门:POJ1837以下内容转载于:http://blog.csdn.net/lyy289065406/article/details/6648094/题目大意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。其中可以把天枰看做一个以x轴0点作为平衡点的横轴输入:2 4 //C 钩子转载 2017-01-30 17:52:00 · 298 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon DP
传送门:POJ3276题意:给定一串字符串和多个单词,问最少去掉多少个字母才能使其由给定单词拼出来。 思路:令dp[i]表示到第i个字母最少去多少个字母,则有(设字符串为s):1.若s[i]与某个单词c首字母相同,则dp[i]=min(dp[i],dp[j]+j-i-strlen(c))2.若s[i]与所有单词首字母都不同则有dp[i]=dp[i-1]+13.初始化dp[n]原创 2017-01-30 21:01:49 · 177 阅读 · 0 评论 -
Palindrome POJ1159 LCS+滚动数组
传送门:POJ1159题意:求给定字符串最少再添加多少个字符能形成回文串。思路:先说感觉超奇妙的一种思路,先求出给定字符串和其逆串的LIS,题目所求即为n-LIS。原创 2017-01-30 17:29:24 · 252 阅读 · 0 评论 -
POJ 1836 Alignment DP LIS
传送门:POJ1836题意:有n个人站成一排,给出他们的身高,让其中某些人出列,要保证剩下的人能看到左边或右边的排头,问最少出队人数是多少。思路:刚看题的时候理解错了题意,还以为剩下的人只能看向同一边,心想这不就是个裸LIS么。。结果还是我太年轻啊。。其实剩下人的身高可以是这样:1 2 3 2 1 或者这样: 1 2 3 3 2 1 正确解法:正向和反向做LIS,然后记录每个点原创 2017-01-30 21:18:27 · 225 阅读 · 0 评论 -
POJ 1260 Pearls DP
传送门:POJ1260以下转自:http://blog.csdn.net/i_want_to_be_a_god/article/details/38032029题意为:给定一系列的不同质量项链上的珠宝数量和价格(按质量升序给出,同时价格也升序)。可以用价格高的珠宝来替代价格低的珠宝。这样或许可以节省总钱数。而题目就是要求出购买所有数量的珠宝所需支付的最低价格。理解题目要注意如下:转载 2017-01-30 21:43:23 · 183 阅读 · 0 评论 -
POJ 1080 Human Gene Functions DP
传送门:POJ1080以下转自:http://blog.csdn.net/lyy289065406/article/details/6648156设dp[i][j]为取s1第i个字符,s2第j个字符时的最大分值则决定dp为最优的情况有三种(score[][]为s1[i]和s2[j]两符号的分数):1、 s1取第i个字母,s2取“ - ”: dp[i-1][j]+s转载 2017-01-30 21:53:26 · 223 阅读 · 0 评论 -
Wooden Signs Gym - 101128E DP
题意:n块木板纵向摆放,给出n+1个数,第一个数先给出最底层木板的尾部,剩余n个数是每块木板的头部的位置,尾部只能和下面与其相邻的木板的头部或者尾部的位置重合,并且不能出现图中打叉号的情况,问一共有几种满足顺序的排列。思路:考虑DP求解,dp[i][j]表示第i个木板尾部在j的时候一共有几种排列情况。因为头部是固定的,所以很自然可以想到枚举尾部的情况,而尾部的情况又是根据上一块木板的头尾决原创 2017-03-31 21:30:17 · 777 阅读 · 0 评论 -
Permutation Counting HDU3664 UVALive - 5092 DP
传送门:HDU3664题意:问1-n的全排列中,满足ai>i(1思路:假设已知n-1的全排列中所有k的情况,那么先把n放到序列最后,然后考虑交换,若n与任意一个满足ai>i的数交换,则不会改变该序列的k值,若与ai因此很容易求得状态转移方程:dp[i][j]=dp[i-1][j]*(j+1)+dp[i-1][j-1]*(i-j); dp[x][y]表示1-x的全排列中满足ai>i(原创 2017-04-01 12:51:45 · 322 阅读 · 0 评论 -
Vladik and Memorable Trip CodeForces - 811C DP
传送门:CodeForces - 811C题意:给定N个数,将它们划分成任意多个区间,要求:相同的数要么在同一个区间内,要么不在任何区间内。问区间异或和最大是多少。思路:可以预处理出区间异或值来,也可以动态求,然后dp求一个最大值。代码:#include#define ll long long#define fi first#define se second#define pi原创 2017-05-31 20:59:41 · 291 阅读 · 0 评论 -
2017浙工大之江学院校赛 M dp||记忆化搜索
Problem M: qwb与二叉树Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 179 Solved: 45[Submit][Status][Web Board]Description某一天,qwb正在上数据结构课。老师在讲台上面讲着二叉树,qwb在下面发着呆。突然qwb想到一个问题:对于一棵n个无编号节点,m个叶原创 2017-06-04 11:14:02 · 407 阅读 · 0 评论 -
POJ - 3046 Ant Counting dp(多重集组合数)
传送门:POJ3046题意:有T种数,每种数有Ni个,问能组成不同的且元素个数属于[S,B]范围的集合共多少个。思路:大白P69例题,dp[i][j]表示从前i种物品中取出j个的组合总数,主要是有一个部分和问题的优化,想不到就会超时。代码:#include#define ll long long#define pb push_back#define fi first#def原创 2017-07-21 13:39:42 · 352 阅读 · 0 评论 -
HDU - 5009 Paint Pearls dp + 链表 + 下界优化
传送门:HDU 5009题意:给出n个连续的珠子,珠子有不同的颜色,现将其划分成任意多段,每一段的代价为该段中颜色种数的平方,问划分的最小总代价和是多少。总思路:dp[i]代表处理到第i个珠子的最小花费,显然dp[i] = min(dp[j] + num[i][j] * num[i][j])(0 优化方法1:用双向链表维护珠子的颜色,使得任意时刻已经遍历过的珠子中每种颜色都只保存一个最原创 2017-10-13 12:02:43 · 204 阅读 · 0 评论