DP
DP
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
【省选模拟】Tree(DP)(分类讨论)
传送门分类讨论有点 nbnbnb,考虑 dpudp_{u}dpu 表示把 uuu 是当前的左上角,且之前的全部填满,将 uuu 的子树填进去的方案数如果儿子个数为 1,那么存在以下情况-系数分别是 1,dpv,1,dpx,dpz1,dp_v,1,dp_x,dp_z1,dpv,1,dpx,dpz,合法的链满足只有中间两个点儿子个数不为 1,其余儿子数均为 1 或 0,这个可以...原创 2020-04-27 22:11:03 · 215 阅读 · 0 评论 -
【省选模拟】20/04/13 切割 (分治)(决策单调性)(DP)
传送门思路:预处理 lislislis,每一个 lislislis 是 xxx 单增 yyy 单减的,那么考虑 lislislis 之间的转移我们考虑两个决策点 j,kj,kj,k,其中 jjj 为最优决策点,那么dpj+xjyj−xjyi−yjxi≤dpk+xkyk−xkyi−ykxi(yk−yj)xi+(xk−xj)yi≤fk−fjdp_j+x_jy_j-x_jy_i-y_jx_i\l...原创 2020-04-13 20:04:24 · 211 阅读 · 0 评论 -
「JOISC 2020 Day3」星座 3 (DFS序)(笛卡尔树)(DP)
传送门建出笛卡尔树,假设当前处理 [l,r][l,r][l,r],高于最大值的星星只能保留一个一颗星星可以定位到上述的唯一一个区间,所以我们可以枚举这一棵星星选了这颗星星的话会 banbanban 掉一些区间的星星,而这个在笛卡尔树上是一条链如果令 f,gf,gf,g 表示当前区间不选 / 选星星,那么 banbanban 掉的就是强制不选星星于是我们维护插值,dfsdfsdfs + ...原创 2020-03-25 23:38:53 · 501 阅读 · 0 评论 -
「JOISC 2020 Day1」建筑装饰 4 (DP)
传送门唯一能自己做出来的一道(呜呜呜)暴力做法是考虑 dpdpdp 出 f0/1,x,yf_{0/1,x,y}f0/1,x,y 表示最后一个在 A/BA/BA/B,A,BA,BA,B 选了 x,yx,yx,y 合不合法,那么发现对于某个特定的 x+yx+yx+y,合法的 xxx 是一个区间,所以记录左右端点 O(1)O(1)O(1) 转移#include<bits/stdc++....原创 2020-03-25 00:02:19 · 437 阅读 · 0 评论 -
【省选模拟】多边形(凸包DP)
钦定一个点为起点,令 fi,jf_{i,j}fi,j 表示凸包的最后两个点为 i,ji,ji,j 的方案数。枚举 kkk 转移到 fk,if_{k,i}fk,i 需要满足 △pik\triangle pik△pik 中没有点,按叉积预处理与原点形成的三角形包涵的点数后就可以 O(n4)O(n^4)O(n4) 做,发现这个可以前缀和优化,按与 iii 形成的极角排序,那么对于 kkk 合法...原创 2020-02-17 20:05:01 · 316 阅读 · 0 评论 -
四边形不等式,决策单调性优化 DP
四边形不等式:任意 a≤b≤c≤da\le b\le c\le da≤b≤c≤d,有 w(a,d)+w(b,c)≥w(a,c)+w(b,d)w(a,d)+w(b,c)\ge w(a,c)+w(b,d)w(a,d)+w(b,c)≥w(a,c)+w(b,d)一维 DPDPDP 的优化对于转移方程 fi=min(fj+val(j,i))f_i=min(f_j+val(j,i))fi=min(f...原创 2019-10-30 22:08:49 · 324 阅读 · 0 评论 -
CSP-S 复习总结 ---- DP
前言:最近刷了一些水题CH5E26题意:一副不含王的扑克牌由52张牌组成,由红桃、黑桃、梅花、方块4组牌组成,每组13张不同的面值。现在给定 52 张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数计数 dpdpdp考虑到剩 1 张花色,剩 2 张花色 … 本质是一样的令 fa,b,c,df_{a,b,c,d}fa,b,c,d 表示还剩 aaa 种剩一个花色的,bbb 种...原创 2019-10-17 20:35:33 · 649 阅读 · 0 评论 -
P4093 [TJOI2016]序列 [CDQ+DP]
传送门我们发现三维偏序问题用CDQ分治实现对于[L-R]区间的DP的值, 我们先递归处理[L-Mid]然后用[L-Mid]的值更新 [Mid+1-R], 最后递归处理[Mid+1 - R]中途左边按a[i]排序, 右边按Min[i]排序, 然后两个指针扫就可以了#include<bits/stdc++.h>#define N 100050using n...原创 2019-02-15 21:01:48 · 154 阅读 · 0 评论 -
欢乐测5题
比赛链接做作业及维护每个时间点需要用笔的人数, 差分数组可以On解决#include<bits/stdc++.h>#define N 1050using namespace std;int n,d[N],ans,Max;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int x,y,z; ...原创 2019-01-28 17:54:13 · 267 阅读 · 0 评论 -
P4042 骑士游戏 [spfa 实现 DP]
传送门f[x] 表示把x杀死的最小花费 我们发现, 只要有一个to 更新了它的f , 对x是有影响的 , 于是我们将to 向x 连边, 跑一个spfa只要x 的答案被更新 , 就将x入队继续去更新其余的答案#include<bits/stdc++.h>#define N 200050#define M 1000050#define inf 10000000...原创 2019-01-22 14:25:26 · 187 阅读 · 0 评论 -
DP速练6题
分析f[i][j] 表示前i本书分给j个人复制的最短时间分析f[i][j] 表示到i 分了j段的最大照明度预处理calc(i,j) , 就是一个背包 分析f[i] 表示到i的最大奶量 注意要在所有中取一个max 而不是f[m] 分析记忆化搜索 分析将高度离散化 , f[i][j] 表示将第i个...原创 2019-01-21 23:28:25 · 165 阅读 · 0 评论 -
方伯伯的玉米田 [DP + 树状数组]
表示到i 拔j次的最长是多少x按顺序插入 , 二维树状数组维护a[x]+y,y#include<bits/stdc++.h>#define N 10050#define M 550#define K 5050using namespace std;int c[M][M+K],a[N],f[N][M],n,k,ans,mx;void Insert(int x...原创 2019-01-04 22:22:29 · 219 阅读 · 0 评论 -
CF739E Gosha is hunting [费用流 或 凸优化DP]
传送门DP 做法首先暴力 n ^ 3的DP应该没有问题, 但是空间和时间都压不下来, 于是有了凸优化表示第 i 位, 用了j个宝贝球, k个超级球现在变成表示第 i 位, 用了j个宝贝球, 随便用多少个超级球的最优方案如果我们选出来的超级球大于b个, 那么我们将每个超级球的值减小 k , 这样选出来的可能会少一些我们二分这个k, 直到选出来的超级球恰好为 b同理,...原创 2019-07-09 23:36:36 · 245 阅读 · 0 评论 -
分配教室[DP]
传送门考试时竟然推出了DP , 好开心 , 和普通选连续一段的题类似 , f[i]表示 1--i 区间的最小代价其中limit--i 为连续的一段 , 我们预处理一些limit , 和两种课的前缀和(s1,s2) 就可以了#include<bits/stdc++.h>#define N 2550#define inf 0x3fffffffusing name...原创 2018-12-30 14:33:45 · 259 阅读 · 0 评论 -
P5154 数列游戏 [区间DP]
传送门先来一波区间DP的套路记dp[i] 为1-i 的答案#include<bits/stdc++.h>#define N 805#define LL long long#define inf 1000000000000000using namespace std;LL f[N][N], dp[N];int A[N], B[N], n;int r...原创 2019-02-28 20:06:48 · 221 阅读 · 0 评论 -
近期刷题总结[2019 03 09]
目录寻找段落[分数规划+单调队列]P4319 变化的道路[LCT + 线段树分治]P2485 [SDOI2011]计算器[exgcd, bsgs] [模板]P4458 [BJOI2018]链上二次求和[线段树][二次前缀和]严格次小生成树[最小生成树+倍增]P2120 [ZJOI2007]仓库建设[斜率优化板子]P2155 [SDOI2008]沙拉公主的困惑...原创 2019-03-09 23:39:58 · 265 阅读 · 0 评论 -
近期刷题总结[ 19 04 07 ]
目录P2523 [HAOI2011]Problem c[ DP + 组合数学 ][CQOI2014]数三角形[ 组合数学 ]P2606 [ZJOI2010]排列计数[ DP + 组合数学 ]P2962 [USACO09NOV]灯Lights[ 高斯消元 + dfs ]JSOI2012 始祖鸟[高斯消元]P2474 [SCOI2008]天平[差分约束]P328...原创 2019-04-07 16:44:41 · 444 阅读 · 0 评论 -
近期刷题总结[ 19 04 21 ]
目录P2056 [ZJOI2007]捉迷藏[括号序列 + 线段树]P3857 [TJOI2008]彩灯[ 线性基 ]P4570 [BJWC2011]元素[ 贪心 + 线性基 ]P5304 [GXOI/GZOI2019]旅行者 [ dijsktra ]P5303 [GXOI/GZOI2019]逼死强迫症[ DP + 矩阵乘 ]P5300 [GXOI/GZOI20...原创 2019-04-21 14:30:04 · 676 阅读 · 0 评论 -
CF1107E Vasya and Binary String [DP]
好难想啊! 不过看到 n <= 100 应该想到可能状态定义要 n^3, 然后复杂度是 n^4 的表示区间 l -- r, r 左边有连续的k个与r相同的答案然后我们枚举把 l -- r 从中间断开, 或者直接把 r 以及后面k个消掉#include<bits/stdc++.h>#define N 105using namespace std;ty...原创 2019-07-11 18:02:30 · 213 阅读 · 0 评论 -
CF1110D Jongmah [DP]
传送门比较容易想到 DP, 但是怎么定义状态呢?一个i,可能有以下几种方式被选 ---- [i-2, i-1, i] [i-1, i, i+1] [i, i+1, i+2] [i, i, i]也就是说,如果我们知道了前三个的次数,在用总的减去再除以3,就是i的贡献了我们知道,对于一个[i-2, i-1, i] 型的麻将组合,最多出现 2 次因为如果出现了3次,就可以变成[i-2...原创 2019-07-16 23:09:38 · 145 阅读 · 0 评论 -
CF1093F Vasya and Array [DP+容斥]
传送门我们令 f[i][k] 表示到 i , 最后一位为k的答案, 减去不合法的答案如果 i-len+1---- i 之间要么是 -1,要么是 j,那么就有可能不合法j 可以接到 第 i-len的任意一个后面,所以但是我们前一位可能就已经将不合法的 j 剪掉了,因为每当到不合法的第一个位置就会被剪掉所以#include<bits/stdc++.h>#...原创 2019-07-16 23:03:21 · 176 阅读 · 0 评论 -
最长上升序列的O(nlogn)求法
d数组:d[i]表示长度为i的最长上升序列的末尾的最小值显然d数组单调递增于是每插入一个i,我们二分找小于它且最大的假设为d[l]d[l]<a , d[l+1]>a因为a可以接在l后面构成长度为l+1,结尾为a的最长上升序列所以讲d[l+1] 更新成a答案为tail#include<bits/stdc++.h>#define N 1...原创 2018-10-05 22:43:37 · 147 阅读 · 0 评论 -
P2135 方块消除 [区间DP]
传送门考虑f[l][r]的最大值 , 我们可以强制将区间的某些数字弄到一起那么f[l][r] 就等于 我们每次到l , r 就dfs 一遍 , 求出最大#include<bits/stdc++.h>#define N 55using namespace std;int n,c[N],v[N],f[N][N],next[N];int Solve(int l,in...原创 2018-12-14 22:55:22 · 419 阅读 · 0 评论 -
P2400 秘密文件 [区间DP] [字符串]
传送门f[l][r] 表示 l到r的最小长度要么由左右两边合并 , 要么自己做一串#include<bits/stdc++.h>#define N 105#define inf 0x3fffffffusing namespace std;string s,a[N][N]; int n,f[N][N];int main(){ memset(f,127,sizeo...原创 2018-12-14 21:46:49 · 353 阅读 · 0 评论 -
Cleaning Shifts[线段树+DP]
传送门区间覆盖问题 , f[x]表示覆盖L--x的最少代价线段树维护区间最小//未ac但对拍过的代码#include<cstdio>#include<algorithm>#define N 10050#define M 100050#define LL long long #define inf 1000000000000000using n...原创 2018-11-18 21:27:32 · 180 阅读 · 0 评论 -
子矩阵[DP]
传送门暴力搜索选哪些行,再在选出来的行DP最坏赋值度 O(C(n,n/2) * n^ 3)#include<bits/stdc++.h>#define N 20#define inf 0x3fffffffusing namespace std;int Map[N][N],tmp[N][N];int n,m,r,c,ans=inf;int cost[N] , v...原创 2018-11-05 23:09:15 · 184 阅读 · 0 评论 -
地球发动机[DP]
一般前30分钟看题,看题不能慌啊,不然捡了芝麻丢了西瓜这道题最开始就看错了,直接整成Ai-Xi -- Ai+Xi 浪费了好多时间dp很好想,每个点由它前面合法的点转移,很明显越靠后与好但求前面的合法点要O(n) 于是我们考虑倒着来a[j] 可以二分找#include<bits/stdc++.h>#define N 100005#define ll ...原创 2018-11-03 14:03:54 · 319 阅读 · 0 评论 -
Park[有向无环图的DP]
---- From decoration #include<bits/stdc++.h>#define N 2005#define M 5005*2#define LL long longusing namespace std;int first[N],next[M],to[M],w[M],tot;int V,m,n,E,L,ans;int...原创 2018-10-21 15:50:33 · 233 阅读 · 0 评论 -
山河令[区间DP]
分析(https://blog.csdn.net/dreaming__ldx/article/details/83447762)#include<bits/stdc++.h>#define N 55#define inf 0x3fffffffusing namespace std;int x[N],w[N];int n,a,b;int g...原创 2018-10-28 13:49:20 · 1829 阅读 · 0 评论 -
最优贸易[Tanjan][拓扑排序][DP]
题目描述C国有n个大城市和m 条道路,每条道路连接这 n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1条。C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。商人阿龙来到 ...原创 2018-09-16 20:14:22 · 228 阅读 · 0 评论 -
序列切割[DP+st表]
给定一个长度为 n 的序列 ai,和一个数字 c。你需要将这个序列切成若干段,对于每一个长度为 k 的数字段,这段中最小的 k/C 个数字(向下取整)都会自动删除,问如何切割使得最后剩下的数字和最小,最小是多少?如序列[3,1,6,5,2]当 C=2,这是 3+6+5=14【输入】第一行是 2 个整数 N,C第二行是 N 个整数 Ai【输出】一个整数,最小值【样例输入】...原创 2018-08-28 23:02:27 · 388 阅读 · 0 评论 -
抢匪的财宝[动态规划]
【问题描述】古威市长和韩丁纳市长都争着要找到抢匪野蛮老危的地图宝藏,放在自己城市的展览馆里。汪汪队帮助古威市长抢先一步找到了藏宝藏的地方。宝藏埋在洞穴中长为n, 宽为m的矩形地面下。汪汪队从洞穴入口A(图中左上角)进入,从洞穴出口B(图中右下角)离开,每步只能向下走或向右走,当走到[x,y]方格时,可取出[x,y]方格及与[x,y]相邻的上下左右四个方向方格中的全部财宝。每个方格中的数表示...原创 2018-08-28 22:36:52 · 258 阅读 · 0 评论 -
Fence Obstacle Course[线段树+DP]
传送门线段树维护从这个点可以掉到哪个栅栏f[i][0] 表示从谷仓到该栅栏的最左端的距离f[i][1] 表示到最右端查询最左端掉下去的栅栏编号为a , 右端为b#include<cstdio>#include<algorithm>#include<cstring>#define N 100005#define M N*2u...原创 2018-11-17 11:23:39 · 329 阅读 · 0 评论 -
The Battle of Chibi[树状数组+DP]
传送门f[i][j] 表示1--i 选j个的情况 先离散化 , 然后开n个树状数组分别维护 f[][j] #include<bits/stdc++.h>#define N 1005#define Mod 1000000007#define LL long longusing namespace std;int T,n,m,a[N],b[N];LL f[N...原创 2018-11-19 20:46:55 · 172 阅读 · 0 评论 -
公交车路线[矩阵乘法优化DP]
传送门f[i][j] 表示 到i走了j步的方案数 因为这里是对称的,所以只考虑上半边 考虑矩阵乘法优化发现矩阵为0 1 0 0 2 0 1 0 0 1 0 10 0 1 0 #include<bits/stdc++.h>#define Mod 1000using namespace std;struct Matrix...原创 2018-12-03 21:21:34 · 427 阅读 · 0 评论 -
线段[luogu3842][DP]
传送门好水的DP , 直接转移就好了#include<bits/stdc++.h>#define N 20050using namespace std;int f[N][2],n,l[N],r[N],len[N];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&l...原创 2018-11-26 22:13:42 · 171 阅读 · 0 评论 -
挂饰[DP]
传送门我们先将这些挂饰按挂钩个数排序 , 这样保证钩子多的先被选到f[i][j] 表示选到第i个 , 钩子数位j的最大价值#include<bits/stdc++.h>#define N 2050using namespace std;int f[N][N],n,ans;struct Node{int a,b;}x[N];bool cmp(Node i,No...原创 2018-11-29 22:32:00 · 156 阅读 · 0 评论 -
循环的债务[恶心的DP]
传送门 表示到第i种钱币 , 第一个人剩多少 , 第二个人剩多少 , 第三个人减一下就出来了 表示第i个人的第j种前有多少张 表示第i种钱的价值其中 我们枚举x1 , y1,如果合法就转移#include<bits/stdc++.h>#define N 1050#define M 10using namespace std;int X1,...原创 2018-11-25 14:49:04 · 275 阅读 · 0 评论 -
低价购买[DP]
传送门dp[i]表示到i的方案数注意去重就可以把刚刚统计了的全部清零#include<bits/stdc++.h>#define N 5050using namespace std;int f[N],n,a[N],dp[N],ans1=1,ans2;int main(){ scanf("%d",&n); for(int i=1;i<=...原创 2018-11-25 18:03:59 · 210 阅读 · 0 评论 -
Estimation[优先队列+DP]
传送门首先f[i][j] 表示1--i 区间分成j段的最小花费,w[i][j]表示区间i--j的花费现在是如何快速求w[i][j]的问题首先知道B因取中位数其次发现w[i][j] = val[后半部分] - val[前半部分]用两个优先队列动态维护前一半和后一半就好了复杂度O(n^2*log(n) + n^2*k)#include<cstdio>#i...原创 2018-11-17 21:18:30 · 205 阅读 · 0 评论