
DP
YJSchaf
这个作者很懒,什么都没留下…
展开
-
BZOJ3173 [Tjoi2013]最长上升子序列
BZOJ3173 [Tjoi2013]最长上升子序列Description将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N)求每一次插入的LIS题解每一次插入的数是递增的,所以我们知道对于一个数x,再最终数列的位置为DxD_x, 那么f[Dx]=max(f[Dx],f[Dx−1])f[D_x]=max(f[D_x],f[D_{x原创 2017-05-13 17:14:38 · 734 阅读 · 0 评论 -
BZOJ3675 [Apio2014]序列分割 斜率优化
BZOJ3675 [Apio2014]序列分割 斜率优化Description将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,将会得到原创 2017-05-28 08:29:38 · 684 阅读 · 0 评论 -
BZOJ1060[ZJOI2007]时态同步
BZOJ1260[CQOI2007]涂色paintDescription小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工 作后,产生一个激励电流,原创 2017-05-20 17:45:07 · 2279 阅读 · 0 评论 -
BZOJ1260[CQOI2007]涂色paint (区间DP)
BZOJ1260[CQOI2007]涂色paint 区间DPDescription给定一个空白木板,你一次可以把一个区间的木板改成一中颜色, 问要求变成给定颜色的木板最少要多少次染色。题解这是典型的区间DP, 根据套路 ,我们可以得到dp式如果c[l]==c[r] f[l][r]=min(f[l+1][r],f[l][r-1]) f[l][r]=min(f[l][k]+f[k+1][r])#i原创 2017-05-20 17:38:17 · 574 阅读 · 0 评论 -
BZOJ1911 [Apio2010]特别行动队 斜率优化
BZOJ1911 [Apio2010]特别行动队 斜率优化Description给定一个序列与一个二次函数f(x),将序列连续分段使得所以区间和的二次函数和最大。求最大值。题解我们可以很容易想出状态转移方程,s表示前缀和。 f[i]=max(f[i],f[j]−F(s[i]−s[j]));f[i]=max(f[i],f[j]-F(s[i]-s[j])); 可是这样的复杂度有O(n2)O(n^2)原创 2017-05-20 17:14:13 · 492 阅读 · 0 评论 -
BZOJ4321 queue2 DP/递推
BZOJ4321 queue2Description求1~n的序列,满足一个数的左右两边的差的绝对值不等与1的方案数。 对答案mod 7777777题解很奇怪的状态,看了题解才搞懂。 钦定f[i][j][1]表示推到第i个数,其中有j对数是相差1的,其中i,与i-1相邻 f[i][j][0]表示推到第i个数,其中有j对数是相差1的,其中i,与i-1不相邻。我们先来分析i-1,i相邻,也就是f[原创 2017-05-17 22:28:20 · 1142 阅读 · 1 评论 -
BZOJ2442 [Usaco2011 Open]修剪草坪 (DP+单调队列)
BZOJ2442 [Usaco2011 Open]修剪草坪Description给定一个n(n<=1000000)个数的正整数序列,要求选取的数连续不超过k,问最大选取值为多少。题解因为序列是正整数,所以我们每次空着不选的长度一定是1。 于是我们可以很容易地推出状态转移方程。 钦定f[i]为序列到i,且第i位不选的最大答案,用sum[i]表示前缀和 我们有 f[i]=max(f[i],f[j原创 2017-05-17 22:05:59 · 607 阅读 · 0 评论 -
BZOJ3437 小P的牧场 斜率优化
BZOJ3437 小P的牧场 斜率优化Description要求将一n(n<=1000000)个点的序列分割,每个分割点上有一个代价a[i],每个点被其右边的点控制,代价为其权值b[i]乘以这个点到其右边第一个分割点中间的点的个数,,求出怎么分割代价最小。题解我们记sum[i]为后缀和,记cnt[j]=∑i=nj(n+1−i)∗b[i]cnt[j]=\sum\limits_{i=n}^{j}(n+1原创 2017-05-28 08:14:43 · 471 阅读 · 0 评论 -
BZOJ1010 [HNOI2008]玩具装箱toy
BZOJ1010 [HNOI2008]玩具装箱toyDescription划分一个数列,区间[l,r]的值x=r−l+∑k=lrCkx=r-l+\sum\limits_{k=l}^{r}C_k 求∑(xi−L)2\sum (x_i-L)^2最小值。题解可以很容易想出状态转移方程 ,记sum[i]为前缀和, f[i]=max(f[j]+(i−j+1+sum[i]−sum[j]−l)2)f[i]=原创 2017-05-28 07:49:12 · 481 阅读 · 0 评论 -
BZOJ2423 [HAOI2010]最长公共子序列 (LCS)
BZOJ2423 [HAOI2010]最长公共子序列 (LCS)Description求出两个数列的LCS长度与个数题解对与第一问,应该都会求,用基本的动态规划就可以搞定。 问题是怎么求个数。 令f[i][j]表示a序列到第i个数与b序列到第j个数的LCS长度。 令g[i][j]表示a序列到第i个数与b序列到第j个数的LCS个数。 如果a[i]==b[j] 那么f[i][j]==f[原创 2017-05-14 17:03:10 · 566 阅读 · 0 评论 -
nlogn求最长上升子序列 (POJ2533)
nlogn求最长上升子序列 (POJ2533)Description求最长上升子序列。题解LIS裸题,但我这里想讲一下nlogn的做法。其实我们可以发现,在通常的LIS算法中的的二个循环的过程中,为了寻找最大值,做了很多无用功。 于是,我们可以用一个单调栈来作为决策列表,用logn的时间来找到最优决策。 对于一个数,如果其大于栈定元素,就将其加入栈,以其结尾的答案就是栈的大小。这就代表着这个数可原创 2017-05-14 15:23:45 · 2615 阅读 · 0 评论 -
POJ1692 Crossed Matchings DP
POJ1692 Crossed Matchings DPDescription给出两列数,要求对上下相同的数进行连线,要求 1.一个数最多连一条线。 2.一条线必须且仅与一条线相交。 求最多可以连出几条线。题解这一题可以用LIS的思想来建立状态转移方程。 令f[i][j]表示第一行到i个数,第二行到j个数的答案。 f[i][j]=max(f[i][j−1],f[i−1][j])f[i][j原创 2017-05-14 14:35:27 · 678 阅读 · 0 评论 -
HDU2881 Jack's struggle (LIS)
HDU2881 Jack’s struggle (LIS)Description给定一个n*n的场地,与m个任务,每个任务要求在第t秒时到达(r,c)位置,每一秒你可以向上下左右移动一个单位。第0秒你可以在任意未知,求最多可以完成多少任务。题解很容易看出来,我们把任务按照时间排序之后就是一个LIS问题了。 判断是否可以转移就是看时间差是否大于欧几里德距离。 这题可以O(n2)O(n^2)卡过。原创 2017-05-13 17:23:19 · 580 阅读 · 0 评论 -
BZOJ2734 [HNOI2012]集合选数
BZOJ2734 [HNOI2012]集合选数Description求出集合{1,2,…..,n}中,满足: 诺x在该集合中,2x与3x不在集合。 的所有子集的个数。对答案mod 1000000001。题解这个题目很要思维了,反正我没想出来,但看了题解十分佩服。 我们构造一个矩阵, x 3x 9x .. 3nx3^nx 2x 6x 18x .. ..原创 2017-06-09 11:30:01 · 625 阅读 · 0 评论