
DP
文章平均质量分 51
commonc
这个作者很懒,什么都没留下…
展开
-
BZOJ4385: [POI2015]Wilcze doły
题目大意:给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。长度肯定为d啊,不用想!那就先算出以每个长度为d的总和g然后就相当于维护一个队列,每次在后面新加入一个数的时候,查询在这段区间内最大的g,看这些数总和减去这个最大值是否小于等于p,如果不是就说明太长了,得删掉队头这样原创 2016-05-10 10:04:21 · 1637 阅读 · 0 评论 -
BZOJ3939: [Usaco2015 Feb]Cow Hopscotch
题目大意:给定一个棋盘,从左上角走到左下角,每次必须严格向右下走一步并且两个各自的标号不能相同,问一共有多少种走法设F[i][j]表示走到(i,j)这个格子的方案数,那么转移方程就是严格左上的所有格子的F值和减去和他相同颜色的F值和,前者可以直接维护前缀和得出,后者可以对每种颜色建一个动态开点的线段树来维护,时间复杂度O(NMlognm),空间复杂度O(NMlognm)原创 2016-08-11 16:18:16 · 906 阅读 · 0 评论 -
BZOJ4676: Xor-Mul棋盘
题目大意:给定一个网格棋盘,每条边有一个权值c,每个点有两个权值a,b,你需要给每个点一个权值d,使得每个点的(a^d)*c的和+每条边的两个端点的d异或起来*c的和最小首先因为是位运算,所以每一位相互独立,可以分开算然后就能想到状压DP,因为n只有5而且每一列只和上一列有关系,所以可以设f[i][j]表示第i列的状态为j,目前产生的代价最小值这样转移的时候枚举上一列的情况,然原创 2016-08-12 10:27:49 · 734 阅读 · 2 评论 -
BZOJ3522&4543: [POI2014]Hotel加强版
题解见http://blog.youkuaiyun.com/neither_nor/article/details/51278993不知道这是什么狗题,时间复杂度貌似是O(N)#include#include#include#define M 3000010#define N 200010using namespace std;long long wa[M];long long *f[N转载 2016-05-11 19:13:23 · 2126 阅读 · 0 评论 -
BZOJ2425: [HAOI2010]计数
题目大意:给你一个最多50位的数,求在所有通过由他去掉0和重新排列数字顺序能产生的数中,比他小的有多少个首先位数少的肯定有去掉0的操作,我们可以默认是把0挪到了前面 问题就变成了把这些数字重新排列顺序能产生多少个比他小的数 首先需要知道当各个数字个数分别为a0,a1...a9a_{0},a_{1}...a_{9}时,自由排列能产生的数的个数为(a0+a1+...+a9)!a0!a1!...a9!原创 2016-09-07 10:14:41 · 1031 阅读 · 0 评论 -
BZOJ2216: [Poi2011]Lightning Conductor
题目大意:已知一个长度为n的序列a1,a2,...,an。对于每个1额,不写题解了,好像也不一定能写出来直接上链接吧-> neither_nor的题解#include#include#include#include#define N 500010using namespace std;int a[N];struct ppp {int w,l,r;}p[原创 2016-10-10 09:37:25 · 710 阅读 · 0 评论 -
BZOJ2089&2090: [Poi2010]Monotonicity 2
题目大意:给一个数字串和一个符号序列,求一个最长的数字串子序列,使得相邻两项都满足对应位置的符号关系一开始想了个DP给否掉了.....结果貌似是对的.....和最长上升子序列类似,F[i]表示以i为结尾最远能匹配到符号序列的第几个可以画一画然后发现F[i]一定可以由前面的F[j]转移而来这样可以想到一个O(N^2)的暴力了,然后考虑优化求最长上升子序列的时候我们可以用一原创 2016-09-21 08:43:53 · 928 阅读 · 0 评论 -
BZOJ2087: [Poi2010]Sheep
题目大意:给一个n个点的凸多边形,再给出k个在多边形内的点,要求你把多边形划分成三角形,使得每个三角形内都有偶数个点,且三角形边上不能有点首先我们需要预处理出多边形的每条对角线是否能把点分成两个偶数部分。这一步我们可以枚举一个起点,然后将k个点按照这个点的极角进行排序,然后扫一遍即可求出以这个点为对角线的一个端点的所有情况上面一步时间复杂度是O(NKlogK+N^2)的紧接着我原创 2016-12-29 14:28:32 · 546 阅读 · 0 评论 -
BZOJ2091: [Poi2010]The Minima Game
题目大意:给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。在这样的情况下,最终A的得分减去B的得分为多少。先把数从小到大排序考虑轮到A取数的时候他会怎么取假设A取的数不是末尾连续的一段的话,那么B下一步的策略完全可以在原来的基础上把末尾连续一段没有取完原创 2016-12-29 15:42:05 · 703 阅读 · 0 评论 -
最小K度限制生成树
算法目的:给出V0,KV_{0},K和一个带边权的无向图,求出在V0V_{0}的度数最多为KK的限制下的最小生成树预备知识:最小生成树、动态规划定义:强制K度最小生成树为所有生成树中V0V_{0}的度数为KK的权值最小的生成树大概思路:先把V0V_{0}和V0V_{0}有关的边都删除,假设现在的图分成了MM个联通块,则我们可以得知对于任何生成树V0V_{0}的度数至少为MM。那么我们依次求出强制M度原创 2017-01-16 16:55:29 · 2128 阅读 · 0 评论 -
BZOJ1133: [POI2009]Kon
题目大意:有n个车站,现在有一辆火车从1到n驶过,给出aij代表从i站上车j站下车的人的个数。列车行驶过程中你有K次检票机会,所有当前在车上的人会被检票,问最多能检多少个不同的人的票最多能检=总人数-最少不能检当我们选出K次检票时间之后,不妨设其为从b1站出发后、b2站出发后....bk站出发后则不能检票数量=cal(1,b1)+cal(b1+1,b2)+....cal(bk+原创 2017-01-12 16:51:36 · 523 阅读 · 0 评论 -
BZOJ1138: [POI2009]Baj 最短回文路
题目大意:给一个有向图,边权都是字母,给出D组询问,每组询问求从A到B的最短回文路长度我们可以把一条回文路经(A,B)想象成从一个初始状态(在A,B在同一个点或者在同一条道路的两端)开始,然后B先随意走一步,接着A反着走一步边权和B走的那一步相同的边...以此类推所以我们可以设一个状态F[i][j][k]表示当前A在i号点,B在j号点,上一步B走的是边权为k的边(如果上一步是A走的原创 2017-01-17 14:38:07 · 595 阅读 · 0 评论 -
BZOJ4580: [Usaco2016 Open]248
题目大意:给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个,问最大能合出多少挺神的一道题F[i][j]表示以i为结尾合出j的话开头的位置在哪,如果不能合出就等于0,转移的时候先让末尾合出j-1,然后在那个开头的地方前一个为结尾再合一个j-1就好了因为输入的数不超过40,所以答案不会超过57时间复杂度上限是O(NlogN),空间复杂度O(57N)#in原创 2016-08-22 11:40:22 · 587 阅读 · 0 评论 -
BZOJ3312: [Usaco2013 Nov]No Change
题目大意:给定一个账单序列,每张消费卡可以支付连续的一段账单,问最少用价值多少的消费卡能支付所有账单一眼状压DP,f[i]表示i状态下最远能付到哪张账单,然后预处理一下每张消费卡从每张账单开始最远能付到哪,转移一下就行了时间复杂度O(2^K*N)#include#include#include#include#define N 100010using namespac原创 2016-08-22 09:52:01 · 687 阅读 · 0 评论 -
BZOJ4379: [POI2015]Modernizacja autostrady
题目大意:给定一棵无根树,边权都是1,去掉一条边并加上一条新边,输出所有可能的新树的直径中的最小值和最大值一看就知道肯定是treeDP了我们可以考虑对于每一条边,假设把它删掉,会得到两棵小树此时新树的最大直径肯定是把两个小树的直径连起来,使得L=L1+L2+1而最小直径肯定是连接两个直径的中点,使得L≈max(L1,L2)所以我们需要得知对于每条边两边的小树的直径分别是原创 2016-04-30 18:38:46 · 1394 阅读 · 0 评论 -
BZOJ3830: [Poi2014]Freight
题目大意:有两个城镇,从A到B需要的时间为S,然后有N辆列车需要从A到B再回来,任何时刻铁路上只能有向着同一个方向前进的列车,然后每辆列车有一个从A出发的最早出站时间,问所有列车全部回到A站的最早时间首先经过分析可以得出,这些列车是分批行进的,就是一批列车从A到B再回来,然后下一批列车再走...一定不会出现某辆列车在某一批到了B而留在那里没有跟着下一波回A的浪潮回来而留守B地等待下一次的情况,原创 2016-05-12 18:53:05 · 1187 阅读 · 0 评论 -
BZOJ3831: [Poi2014]Little Bird
题目大意:从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力O(NQ)能过直接单调队列搞一下就好了#include#include#include#include#define MAXN 1100000using namespace std;int n,m,H[MAXN],f[MAXN],q[MAXN];int m原创 2016-05-13 09:06:35 · 880 阅读 · 0 评论 -
BZOJ3427: Poi2013 Bytecomputer
题目大意:给一个只包含-1,0,1的数列,每次操作可以让a[i]+=a[i-1],求最少操作次数使得序列单调不降 一看就是个DP,不妨用f[i][0..1..2]分别表示把第i位变成-1,0,1且保证前i个单调不降的最少次数然后分各种情况讨论转移一下就行了具体如下:想让第i位变成-1,那就可以让第i-1位变成-1然后在对第i位进行操作直到变成-1想让第i位变成0,那就要根据原创 2016-05-29 10:58:14 · 918 阅读 · 0 评论 -
BZOJ3872: [Poi2014]Ant colony
题目大意:给一棵树,对于每个叶子节点,都有g群蚂蚁要从外面进来,每群蚂蚁在行进过程中只要碰到岔路,就将平均地分成岔路口数-1那么多份,然后平均地走向剩下的那些岔路口,余下的蚂蚁自动消失,树上有一个关键边,假如有一群蚂蚁通过了这条边且数量恰好为k,这k只蚂蚁就被吃掉,问一共有多少只蚂蚁被吃掉显然得从那条关键边倒着推以这条边作为这棵树的“根”,开始遍历其他的边,遍历到每条边的时候计算一原创 2016-05-18 19:13:59 · 1039 阅读 · 0 评论 -
BZOJ4629: [BeiJing2016]打字机
测试点 1 – 2 满足,n = 1 或 k = 0;测试点 1 – 6 满足,n ≤ 100,m ≤ 500,∑|Si| ≤ 500,A i ≤1000;测试点 7 – 8 满足,k = 0,∑|Si| ≤ 200;测试点 9 – 10 满足,∑|Si| ≤ 50,A i ≤1。对于 100%的数据,n ≤ 100,m ≤ 10 9 ,∑|Si| ≤ 500,A原创 2016-07-01 14:51:32 · 1193 阅读 · 0 评论 -
BZOJ3174: [Tjoi2013]拯救小矮人
题目大意: 每个小矮人有臂长和身高,它们可以搭人梯,如果人梯的人高度总和+最上面的人的手的高度>=H,那最上面的人就可以跑,跑了的人不能再搭人梯,问最多能跑几个小矮人这题...做了好长好长时间啊貌似从2015年就开始做了,但是当时写了个贪心不对,然后又上网搜题解没看懂,瞎改DP也不对,过了几个月重新做也是WA,今天突然心血来潮写一发就A了...首先是要按照身高+臂长来排序,但是原创 2016-06-16 18:49:44 · 1014 阅读 · 1 评论 -
BZOJ2798: [Poi2012]Bidding
题目大意:初始有一个数对(1,0),每次可以把数对(x,y)变成(1,x+y),(2x,y),(3x,y)其中之一,当x+y≥n时获胜,你是先手,让你写一个算法和他交互首先先把操作序列进行分割,每当进行一次(1,x+y)操作就相当于重新开始游戏一遍并且将n变小于是可以想到DP,F[i]表示当最大限制为i时的最优方案是什么但是后来发现状态不够,因为x会有不同的取值影响结果,所以D原创 2016-06-20 19:03:08 · 846 阅读 · 0 评论 -
BZOJ2803: [Poi2012]Prefixuffix
题目大意:给一个字符串,求一个最大长度L≤n/2,使得前L个字符与后L个字符循环同构首先如果头和尾长度为L的子串循环同构,就一定能找到一个合理的X,使得原字符串的X前缀与X后缀匹配并且砍掉他们之后,剩下的L-X前缀与L-X后缀匹配大概意思就是这样:ababbabababbaab所以不妨设f[I]表示原字符串砍掉i前缀和i后缀之后,首尾最大匹配长度这样我们就只需要原创 2016-06-23 14:15:28 · 806 阅读 · 0 评论 -
BZOJ2526: [Poi2011]Inspection
题目大意:给定一颗n个节点的树,要求求出从每个节点开始的遍历最小代价。一次遍历是指,每次从这个点出发去一个点再回来,代价是这条边边权*2,相邻两次选择的点对于这个点来说不能在同一颗子树里,最后一次可以不用回来,总代价就是每次出去再回来的代价之和刚一看题,这不SB题吗,一个treeDP维护出来最长链次长链不就完事了吗,每次从一个点转移过来的时候就各种讨论一下就好了判断误无解的时候,只原创 2016-07-09 10:27:10 · 963 阅读 · 0 评论 -
BZOJ2794: [Poi2012]Cloakroom
题目大意:n个物品有三个属性a,b,c,q个询问每次给出m,k,s,问能不能在物品中选出一些使得每个的a≤m,b>m+s,c的和正好等于k看完题感觉无从下手....然后就去翻了题解,感觉还是挺水的....先离线,把询问按m排序,物品按a排序,这样就相当于每次添加物品,问能不能在正好凑出c的情况下让最小的b大于m+s这就可以直接背包了....时间复杂度O(QlogQ+N*原创 2016-06-23 18:44:00 · 1367 阅读 · 0 评论 -
BZOJ4784: [Zjoi2017]仙人掌
题目大意:给你一个无重边无自环的无向连通图,问有多少种加边方法,使得加完边之后这个图是一个仙人掌好像蛮厉害的一个题我们把仙人掌想象成DFS树+返祖边,显然返祖边连接的两个点之间的路径不能有交因为题目中说了不能有重边,所以我们可以想象把最后仙人掌的那些“桥”又连了一条边,这样就变成了我们要把DFS树上所有的边都用“返祖边两点之间的路径”来覆盖这个我们可以怎么做呢?原创 2017-03-29 14:44:53 · 1496 阅读 · 0 评论