区间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 · 104 阅读 · 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 · 211 阅读 · 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 · 185 阅读 · 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 · 338 阅读 · 0 评论