区间dp
SC.ldxcaicai
我很菜=_=
展开
-
2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)
传送门区间dp简单题啊。很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价。这样可以O(n)O(n)O(n)枚举断点转移了啊。显然如果断开的两个点颜色相同可以省掉一次。但是注意如果[l,r][l,r][l,r]两端点相同同样可以省掉一部分代价(细节见代码)。代码:#include<bits/stdc++.h>#de...原创 2018-09-17 20:34:50 · 127 阅读 · 0 评论 -
2018.10.23 hdu2476String painter(区间dp)
传送门一道挺妙的区间dp.我们先用区间dp求出第一个串为空串时的最小代价。然后再加入原本的字符更新答案就行了。代码:#include<bits/stdc++.h>using namespace std;char s[105],t[105];int n,ans[105],f[105][105];inline int dfs(int l,int r){ if(~f[l...原创 2018-10-23 23:35:54 · 105 阅读 · 0 评论 -
2018.10.23 hdu4745Two Rabbits(区间dp)
传送门区间dp经典题目。首先断环为链。然后题目相当于就是在找最大的回文子序列。注意两个位置重合的时候相当于范围是n,不重合时范围是n-1.代码:#include<bits/stdc++.h>using namespace std;const int N=2005;int n,a[N],f[N][N];inline int dfs(int l,int r){ ...原创 2018-10-23 23:20:01 · 212 阅读 · 0 评论 -
2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
传送门区间dpdpdp好题。首先肯定需要把坐标离散化。然后在数轴上面区间dpdpdp.对于当前区间,区间中最大的数一定会被选。于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在iii以及其后面,右端点在jjj以及其前面的所有外星人gggggg的最小花费。由于最大的一定被选。于是我们枚举它是在哪个时间点被选的。然后用f[i][k−1],f[k+1][j]f[i][k-1...原创 2018-10-25 09:54:59 · 237 阅读 · 0 评论 -
2018.10.25 bzoj4350: 括号序列再战猪猪侠(区间dp)
传送门区间dp好题。首先我们并不用把右括号拿进来一起dpdpdp,而是直接用左括号来dpdpdp。然后定义状态fi,jf_{i,j}fi,j表示区间[l,r][l,r][l,r]的合法方案数。如果没有限制直接分三种情况讨论就行了。形如(AB)(AB)(AB)形如()AB()AB()AB形如(A)B(A)B(A)B但是现在有了限制。因此我们枚举决策的时候判当前转移是否合法。...原创 2018-10-25 08:58:25 · 213 阅读 · 0 评论 -
2018.10.25 bzoj4565: [Haoi2016]字符合并(区间dp+状压)
传送门当看到那个k≤8k\le 8k≤8的时候就知道需要状压了。状态定义:f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]处理完之后的状态为kkk时的最大贡献。由于每次合并会减少K−1K-1K−1个,因此0&lt;k≤K−10&lt;k\le K-10<k≤K−1。然后转移的时候不用一个一个转移。两次转移的断点的距离...原创 2018-10-25 07:52:53 · 156 阅读 · 0 评论 -
2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)
传送门这题转移很妙啊。f[l][r][1/0]f[l][r][1/0]f[l][r][1/0]表示对于区间[l,r][l,r][l,r]有/无重复的机会时压缩的最小值。那么可以从三种情况转移过来。当前区间允许重复时,分成两段分别压缩且两段都可以重复,那么为了不使前后发生冲突中间断开时需要加一个MMM。只压缩前面一段,后面一段不动。如果当前区间能被分成两端一样的前面一段不压缩,后面一段...原创 2018-10-20 21:17:56 · 186 阅读 · 0 评论 -
2018.10.22 bzoj4380: [POI2015]Myjnie(区间dp)
传送门区间dp好题。f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]最小值为kkk时的最大贡献。然后可以枚举端点转移。当时口胡到这儿就不会了。于是细节请教了DZYODZYODZYO学长。大概就是预处理出区间[l,r][l,r][l,r]中大于等于valvalval的有几个数来优化转移。每个fff数组中记录:当前的最优值。k以及其...原创 2018-10-22 21:59:48 · 166 阅读 · 0 评论 -
2018.10.22 bzoj1742: Grazing on the Run 边跑边吃草(区间dp)
传送门区间dp入门题。可以想到当前吃掉的草一定是一个区间(因为经过的草一定会吃掉)。然后最后一定会停在左端点或者右端点。f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]表示已经吃了[i,j][i,j][i,j]的草,最后停在左/右端点。利用费用提前计算的思想转移就行了。代码:#include&lt;bits/stdc++.h&gt;#define N 10...原创 2018-10-22 19:16:57 · 192 阅读 · 0 评论 -
2018.10.27 loj#2292. 「THUSC 2016」成绩单(区间dp)
传送门g[i][j][k][l]g[i][j][k][l]g[i][j][k][l]表示将区间l,rl,rl,r变成最小值等于kkk,最大值等于lll时的花费的最优值。f[i][j]f[i][j]f[i][j]表示取掉区间l,rl,rl,r的最优值。考虑ggg数组的转移。g[i][j+1][min(k,w[j+1])][max(l,w[i+1])]=min(g[i][j+1][min(k,...原创 2018-10-27 16:58:15 · 339 阅读 · 0 评论