
动态规划
qpswwww
这个作者很懒,什么都没留下…
展开
-
[POI 2011]Lightning Conductor(DP优化)
题目链接http://main.edu.pl/en/archive/oi/18/pio题目大意已知一个长度为n的序列a1,a2,…,an。 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs(i-j))思路容易想到DP思路,用f[i]f[i]表示对应于ii的最小非负整数pp,DP方程为 f[i]=max1≤j≤n{0,⌈aj+|i−原创 2015-06-15 11:42:13 · 1006 阅读 · 0 评论 -
[BZOJ 2436][NOI 2011]NOI嘉年华(DP优化)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=2436思路这个题做起来很复杂很繁琐。。。以下思路整理自http://blog.youkuaiyun.com/whjpji/article/details/7547159 首先将所有的区间离散化,这一步很好实现。 然后就是求三个数组num[i][j],pre[i][j],suf[i][j]num[i][j原创 2015-04-24 21:42:32 · 2153 阅读 · 0 评论 -
[SCOI 2015集训]B
题目思路代码好像ubuntu里写的代码,在win下面就wa了而且还会出现乱码注释。。。 注意INF定为1e18!输出在win下是I64d,不然只能拿到50分!#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 1000010#原创 2015-04-16 11:56:08 · 714 阅读 · 0 评论 -
[省选前题目整理][BZOJ 3670][NOI 2014]动物园(KMP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3670思路为了方便叙述,下面所说的前缀ii就是字符串中的区间[1,i][1,i]对应的子串根据KMP定义,next[i]=jnext[i]=j表示前缀j前缀j满足既是前缀ii的前缀,又是前缀ii的后缀,且jj是最大的。(其实题目里对此也有说明)然后我们可以根据next[]next[]数组构造一个原创 2015-04-08 10:18:02 · 1306 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1833][ZJOI 2010]count 数字计数(数位DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1833思路http://blog.youkuaiyun.com/qpswwww/article/details/43982403代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include原创 2015-04-01 16:50:28 · 658 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1026][SCOI 2009]windy数(数位DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1026思路很好的一道数位DP入门题。。。 显然我们只需要求出 首先预处理出f[i][j]=最高位为i,最高位数字为jf[i][j]=最高位为i,最高位数字为j的windy数个数,然后按位DP统计即可。。。代码#include <iostream>#include <stdio.h>#in原创 2015-04-01 15:58:03 · 618 阅读 · 0 评论 -
[BZOJ 3156]防御准备(斜率优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3156思路很容易推出DP方程: f[i]=min{f[j]+∑k=j+1i(i−k)}+a[i]f[i]=min\{f[j]+\sum_{k=j+1}^i(i-k)\}+a[i] 进一步对该方程变换得到 f[i]=min{f[j]+(i−j−1)(i−j)2}+a[i]f[i]=min\{原创 2015-04-01 15:07:05 · 590 阅读 · 0 评论 -
[省选前题目整理][BZOJ 3675][APIO 2014]序列分割(斜率优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3675思路首先设f[i][k]=长度为i的序列,划分了k次f[i][k]=长度为i的序列,划分了k次得到的分数,sum[i]=∑it=1Atsum[i]=\sum_{t=1}^i{A_t},即序列AA的前缀和 很容易推出DP方程: f[i][k]=max{f[j][k−1]+sum[j](s原创 2015-04-01 11:24:32 · 860 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1010][HNOI 2008]玩具装箱toy(斜率优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1010思路很容易想到一个O(n2)O(n^2)的DP方程: f[i]=min{f[j]+(i−j−1+sum[i]−sum[j]−L)2},j<if[i]=min\{f[j]+(i-j-1+sum[i]-sum[j]-L)^2\},j<i 其中sum[x]=∑xi=1Cisum[x]=\su原创 2015-04-01 08:45:17 · 637 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1087][SCOI2005]互不侵犯King
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1087思路首先预处理出对于单独的一行而言的所有合法的状态,然后预处理出相邻两行合法的状态对(S1,S2)(S_1,S_2)。然后直接DP就行了代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string原创 2015-03-31 19:29:11 · 568 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1096][ZJOI2007]仓库建设(斜率优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1096思路裸DP很水。。。但是O(n^2)承受不起这么大的范围,一定TLE,只能采取小于O(n)的斜率优化DP,具体就是维护一个双向队列,使得队列内的点形成下凸的函数图像,这样就能舍掉很多不必继续循环DP的非最优解,具体可以参考JSOI集训队论文《单调性优化在动态规划中的应用》下面是我花了将近半原创 2015-03-31 21:30:06 · 665 阅读 · 0 评论 -
[省选前题目整理][BZOJ 1911][APIO 2010]特别行动队(斜率优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1911思路 注:单调递减的队列里,相邻两个点的连线的斜率是单调递增的,即维护一个下凸壳代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#de原创 2015-03-31 20:35:07 · 659 阅读 · 0 评论 -
[省选前题目整理][URAL 1519]Formula 1(插头DP)
题目链接http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22385题目大意给出一个n∗mn*m大小的棋盘,棋盘上有空格也有障碍物,求经过所有非障碍格子的曼哈顿回路个数。思路可以用插头DP解决此题。插头DP中的轮廓线SS的ff值就代表了轮廓线上的插头状态为SS,并且经过了被DP遍历过的所有格子的不完全曼哈顿回路个数我这里定义的不完原创 2015-03-31 11:28:08 · 587 阅读 · 0 评论 -
[省选前题目整理][POJ 3133]Manhattan Wiring(插头DP)
题目链接http://poj.org/problem?id=3133题目大意给定一个n*m的棋盘,每个格子要么是空格,要么是障碍物,要么是格子1,要么是格子2,整个棋盘有且仅有2个格子1,2个格子2,现在要把两个1用联通块连起来,两个2用联通块连起来,而且两坨联通块之间不能有交集,求两坨联通块大小-2。 整体思路:插头DP、最小表示法。 不妨设整个棋盘数组为map[][],map[i][j]=0原创 2015-03-31 17:19:18 · 970 阅读 · 0 评论 -
[BZOJ 1564][NOI 2009]二叉查找树(DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1564思路看上去此题似乎并不好做,但是注意到,这个二叉查找树就是一个treap,而且这个treap在权值上看是个小根堆,在键值上看,键值的前序遍历是升序的。因此该二叉查找树的前序遍历显然是固定的。而且由于初始时每个结点的键值和权值互不相同,且要求修改后权值仍然互不相同,实际上我们可以认为修改后完原创 2015-04-26 20:53:41 · 1012 阅读 · 0 评论 -
[BZOJ 1415][NOI 2005]聪聪和可可(SPFA+概率DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1415思路根据题目要求,聪聪每次从旧点uu移动到新点vv,vv是uu到可可当前所在的点TT的最短路径上,与uu相邻的那个点,并且若存在多条最短路径,vv的编号一定是所有满足条件的vv中最小的。而且在一步之内,聪聪可以先跳到当前点uu的一个后继u′u'上,若u′u'不是TT,则聪聪可以再从u′u'原创 2015-04-25 15:39:57 · 875 阅读 · 0 评论 -
[NOI 2014复习]斜率优化(BZOJ 1096、BZOJ 1010)
1.BZOJ 1096 仓库建设题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1096思路令f[i]=[1,i]f[i]=[1,i]区间,在第i个工厂建立仓库,所需最少总花费。DP方程显然 f[i]=min1≤j<i{f[j]+w[j,i]}+C[i]f[i]=\min_{1\leq j<i}\{f[j]+w[j,i]\}+C[i] 其中原创 2015-07-11 11:45:31 · 952 阅读 · 0 评论 -
[Codeforces 55D]Beautiful numbers(数位DP)
题目链接http://codeforces.com/problemset/problem/55/D题目大意多次询问。求[L,R][L,R]中能被自己的每一位数位整除的数字个数思路像大多数的数位DP题一样,我们只需要能求出[0,x]里能被自己的每一位数位整除的数字个数就好了显然数字x能被自己的每一位数位整除,当且仅当它能被自己的每一位数位的LCM整除而1~9的子集的LCM最大值,也就是lcm(1,2.原创 2015-06-30 16:46:24 · 770 阅读 · 0 评论 -
[POJ 3420]Quad Tiling(状压DP+矩阵乘法)
题目链接http://poj.org/problem?id=3420题目大意给你一个4∗n4*n大小的棋盘,要你在上面用若干个1∗21*2大小的方块填满,两个方块之间互相不能重叠。问填满方块的方案数思路考虑nn比较小的情况。用f[i][S]f[i][S]表示当前dp到第ii列,上一列格子是否填满的二进制状态为SS的方案数。那么可以假设存在第0列,该列状态为(1111)2(1111)_2,则初始时f[原创 2015-05-21 10:21:10 · 900 阅读 · 0 评论 -
[UOJ 110][APIO 2015]Bali Sculptures(按位DP)
题目链接http://uoj.ac/problem/110思路此题如果直接用类似于NOIP乘积最大一题的那种DP做法的话,是错误的,因为此题有后效性。可以考虑拆位来做,先尽量让答案的高位为0,在答案高位尽量小的前提下,再争取让答案的低位为0。对于前4个subtask,由于A>=1A>=1,因此直接用DP求每一位的最少分组的话是不对的。可以采取O(n3logY)O(n^3logY)的做法,从最高位向最原创 2015-06-19 15:57:13 · 854 阅读 · 0 评论 -
[POI 2013]Bytecomputer(DP)
题目链接http://main.edu.pl/en/archive/oi/20/baj题目大意给你一个长度为nn的序列aa,序列里每个元素要么是0,要么是-1,要么是1,每次操作可以让a[x]=a[x]+a[x−1]a[x]=a[x]+a[x-1],问至少要做多少次操作,才能让整个序列变成非降序列思路可以发现,最终的序列是一定是-1 -1 -1…-1 -1 -1 0 0 0…0 0 0 1 1 1…原创 2015-05-14 15:11:28 · 1001 阅读 · 1 评论 -
[POI 2012]Cloakroom(DP)
题目链接http://main.edu.pl/en/archive/oi/19/sza题目大意有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]a[i]<b[i])。 再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得: 1. 对于每个选的物品i,满足a[i]<=m且b[i]>m+s。 2. 所有选出物品的c[i]的和正好是k。思原创 2015-05-15 21:57:17 · 780 阅读 · 0 评论 -
[POI 2014]Little Bird(单调队列优化DP)
题目链接http://main.edu.pl/en/archive/oi/21/pta题目大意mm只小鸟各自要从1号柱子飞到nn号柱子,假如当前小鸟在ii号柱子,那么它可以飞向i+1i+1到i+Kii+K_i号柱子,若小鸟从柱子ii飞到了柱子jj且Hi≤HjH_i \leq H_j,则小鸟需要付出1单位的代价,问每只小鸟从柱子1飞到柱子nn各自至少需要花费多少代价。思路用f[i]f[i]表示小鸟飞到原创 2015-05-13 11:39:32 · 782 阅读 · 0 评论 -
[BZOJ 1597][USACO 2008 Mar]土地购买(DP+斜率优化)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1597思路首先对所有的矩形按照第一关键字长度升序,第二关键字宽度升序排序,然后贪心地将每个会被其他矩形完全覆盖住的矩形全部删去。显然此时所有的矩形是按照长度升序,按照宽度降序排列的。为什么呢?假如有两个矩形i,j,i<ji,j,i<j,且ii的宽度是大于jj的宽度的,由于之前去掉矩形前排序时已经原创 2015-05-05 19:36:44 · 618 阅读 · 0 评论 -
[BZOJ 2433][NOI 2011]智能车比赛(计算几何+动态规划)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=2433思路一个很显然的O(n3)O(n^3)做法:每个矩形上有四个顶点,首先暴力枚举定点对(i,j)(i,j),再枚举其他的点,叉积判断是否有矩形与矩形的连接处卡住了直线ijij,若没有被卡,那么在图中连ii到jj的无向边,边权为两点间的距离。然后随便用个什么最短路算法求出起点到终点的最短路就可原创 2015-04-28 09:11:23 · 1216 阅读 · 0 评论 -
[BZOJ 1505][NOI 2004]小H的小屋(DP优化)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1505思路用g[i][j]g[i][j]表示南方向上,xx轴方向上长度为ii的区间,划分成jj个矩形的最小面积。f[k][i][j]f[k][i][j]表示xx轴方向上长度为kk的区间,北方向上放ii个矩形,南方向上放jj个矩形的最小面积。可以得到下面的dp方程 g[i][j]=mini′<i原创 2015-04-30 10:06:55 · 1372 阅读 · 0 评论 -
[BZOJ 1867][NOI 1999]钉子和小球(DP水题)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1867思路用f[i][j]f[i][j]代表小球落到第ii行第jj个格子上的概率。很容易得到DP方程 f[i+1][j]+=12f[i][j],f[i+1][j+1]+=12f[i][j],(i,j)是钉子f[i+1][j]+=\frac 1 2 f[i][j],f[i+1][j+1]+=\f原创 2015-04-30 08:06:54 · 967 阅读 · 0 评论 -
[BZOJ 1499][NOI 2005]瑰丽华尔兹(DP+单调队列优化)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1499思路一个很显然的O(nmT)O(nmT)的做法就是令f[t][i][j]f[t][i][j]表示时刻tt时,钢琴位于(i,j)(i,j)处时,从时刻11到tt的最长滑行路程。很容易得到DP方程 f[t][i][j]=max{f[t−1][i][j],f[t−1][ilast][jlast原创 2015-04-25 11:11:33 · 1562 阅读 · 0 评论 -
[BZOJ 1494][NOI 2007]生成树计数(状压DP+最小表示法+矩阵乘法)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1494思路由于每个点ii只能和点i−Ki-K到i−1i-1连边,因此点i−K+1i-K+1和其前面的所有点一定是都在同一个联通块。因此我们只需要用一个长度为KK的序列来表示点i−K+1i-K+1到点ii的连通性,而其他的点一定是连通的,就不必表示连通性了。这个连通性的序列可以用最小表示法压缩成一原创 2015-04-29 09:54:25 · 2197 阅读 · 0 评论 -
[BZOJ 1068][SCOI 2007]压缩(DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1068思路不妨设整个字符串长度为nn。根据题意,我们可以看作在区间[1,n][1,n]之前已经放有一个字母M。那么我们就是要用若干个M和R,将字符串中的循环节括起来,并使最终压缩后的字符串尽量短,显然这是个划分DP,而且用记忆化搜索写起来简单些。 实际上我们只需要DP出字符串中怎么放M就可以了原创 2015-03-10 11:35:29 · 1362 阅读 · 0 评论 -
[BZOJ 1855][SCOI 2010]股票交易(单调队列优化DP)
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1855思路很显然是个DP题,比较容易想到下面的DP做法: 用f[i][j]f[i][j]表示第ii天,手上有jj个股票的最大获利。显然最终的答案为max{f[i][0]}max\{f[i][0]\}(显然以某天交易结束后收手不干,肯定是手上没有股票是最优的),DP初始化如下: f(x)={f原创 2015-03-20 11:54:57 · 1876 阅读 · 0 评论 -
[BZOJ 1046][HAOI 2007]上升序列(nlogn的LIS算法)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1046有人说这题是NOIP难度?表示怀疑,蒟蒻认为此题难度略大于NOIP。。。。这个题的序列长度nhttp://www.slyar.com/blog/longest-ordered-subsequence.html中有详细讲解。由于题目题意要求,我们需要求出以每个数字开头原创 2014-12-03 17:20:20 · 1064 阅读 · 0 评论 -
[BZOJ 1270][BeijingWc2008]雷涛的小猫
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1270看到题面上的PKU宿舍,又让我怀念起七月份在PKU上课的那段快乐时光。。。这也许是WC的送分题吧,比较简单的动规,但是也很巧妙。用f1[i]表示小猫在高度i时得到的柿子个数最大值,f2[i]表示在当前高度上,小猫在第i根柱子上得到的柿子个数最大值。然后高度从高到低遍原创 2014-11-30 21:59:20 · 875 阅读 · 0 评论 -
[HDU 1422]重温世界杯(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422思路:DP,状态f[i]保存到达第i个城市口袋里的钱和最多能访问到的城市个数,用序列型DP的思想处理,按照终点进行DP即可#include #include #include #include #include #define MAXN 200010using namesp原创 2014-11-06 16:27:13 · 859 阅读 · 0 评论 -
[HDU 1069]Monkey and Banana(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069题目大意:给你n个积木,告诉你它们的长宽高,要你搭出一个塔,这个塔上面的积木长和宽必须小于下面积木的长和宽,求这个塔的最大高度思路:将n块积木转化成3*n块积木,相当于每块积木的原来状态、翻转后的状态。然后对这3n个积木按高度排序,此题就变成了一个类似于求最长下降子序列的问题#incl原创 2014-11-06 16:03:03 · 706 阅读 · 0 评论 -
[BZOJ 1026][SCOI 2009]windy数(数位DP)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1026很基础的数位DP题,很早之前我就尝试做这题,不过当时我被这题吓死了,现在回过头做这题,感觉简单多了。做这个题时我想到了POJ一道类似的组合数学的题,同样是按数位统计,有异曲同工之妙。题目要求[a,b]区间上的windy数个数,我们可以转化成求[1,a]上的windy原创 2014-11-30 21:01:10 · 794 阅读 · 0 评论 -
[HDU 1087]Super Jumping! Jumping! Jumping!(类LIS DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087原创 2014-11-06 16:15:56 · 519 阅读 · 0 评论 -
[HDU 1078]FatMouse and Cheese(记忆化DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078题目大意:一个胖老鼠要在一个n*n大小的棋盘里吃奶酪,这个老鼠每一步最多能走k单位远,而且每走一步,必须走到比当前点奶酪数多的点那去。告诉你这个棋盘里每个点上的奶酪个数,求这个老鼠最多能吃多少奶酪。思路:类似于棋盘DP的记忆化DFS,直接搜加记忆答案就可以了。#include #in原创 2014-11-06 16:10:54 · 717 阅读 · 0 评论 -
[HDU 1176]免费馅饼(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176思路;预处理出每一时刻每一位置的烧饼数,然后按时间进行DP就可以了,具体看代码,实现很简单。#include #include #include #include #include #define MAXN 100010#define MAXM 15using names原创 2014-11-06 16:21:18 · 720 阅读 · 0 评论 -
[HDU 1421]搬寝室(富有新意的DP)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1421题目大意:给出n个物品,要你选出k对物品,使得每对物品之差的平方之和最小。思路;动态规划求解,首先将物品按重量升序排序,根据贪心思想,每对物品必然是相邻的两个物品,这样重量差的平方才能保证最小。然后DP,用f[i][j]表示前i个物品,选j对的最少代价,这里需要进行一个重要的分类讨论:原创 2014-10-16 21:45:01 · 884 阅读 · 1 评论