[TJOI2007] 线段 (动态规划)】的更多相关文章

题目链接 Solution 传统的线性 \(dp\) . \(f[i][0]\),\(f[i][1]\) 分别表示最后一次在 \(i\) ,然后在 左边或者右边的最小步数. 然后就每次根据上一次左边和右边的状态转移过来. Code #include<bits/stdc++.h> #define N 20001 #define in(x) x=read() using namespace std; int l[N],r[N],n,ans=0x3f3f3f3f; int v[N],f[N][2];…
题目链接 luogu [TJOI2007]线段 题解 dp[i][0/1]第i行在左/右端点的最短路 瞎转移 代码 #include<bits/stdc++.h> using namespace std; inline int read() { int x= 0 ,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&c >= '0')x =…
因为每行必须走完才能到下一行,所以我们有两种决策: 1.最后留在线段左端点 2.最后留在线段右端点 这种存在状态转移且多决策的问题用动态规划来进行递推是最好不过的了. 所以我们设\(dp[i][0/1]\)来表示在第\(i\)行最后留在左/右端点的行走路径最小值.然后设\(sum[0/1][0/1]\)来表示相邻行左右端点之间的距离.(0表示左端点,1表示右端点) 然后很容易就知道状态转移的式子: \(dp[i][0]=min(dp[i-1][0]+1+dis[0][0],dp[i-1][1]+…
裸DP.感觉楼下的好复杂,我来补充一个易懂的题解. f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数. 那么转移就很简单了,走完当前行且停到左端点,那么一定是从右端点过来的,那么从上一行左端点转移的话就是 f[i][0]=abs(上一行左端点的坐标-本行右端点的坐标+本行线段长度) 从上一行右端点转移同理. 不需要什么判断.边界f[1][0]=r[1]+r[1]-l[1]-1,f[1][1]=r[1]-1,然后直接搞就行了,时间复杂度O(n)…
最近多刷些dp,觉得这个算不上蓝题   在一个\(n\times n\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i, L_i)\),右端点是\((i, R_i)\),其中\(1\leq L_i \leq R_i \leq n\). 你从\((1, 1)\)点出发,要求沿途走过所有的线段,最终到达\((n, n)\)点,且所走的路程长度要尽量短. 更具体一些说,你在任何时候只能选择向下走一步(行数增加 1).向左走一步(列数减少 1)或是向右走一步(列数增加 1).当然…
目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG1006 传纸条 CH5104 I-区域 LG1359 租用游艇 USACO2.3 最长前缀 Longest Prefix LG1435 回文字串 LG1854 花店橱窗布置 LG3842 [TJOI2007]线段 LG5017 摆渡车 LG1434 [SHOI2002]滑雪 LG2051 [AHO…
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护卫队 一维线性DP 洛谷P1137 旅行计划 拓扑序DP(递推) 洛谷P2736 “破锣摇滚”乐队 Raucous Rockers 三维DP 洛谷P3197 [HNOI2008]越狱 假装是递推(组合数学) 洛谷P1122 最大子树和 树形贪心(笑) 洛谷P1063 能量项链 极水的区间DP,断环复…
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续更新,自2018.9.19开始,计划更新到2018NOIP截止 (但是因为最近写的比赛题比较多..但是没有办法把这些题放上来..所以只能放上主流OJ上面有的题) 如果本蒻今年有幸没有AFO掉,flag先里在这里--之后学省选知识点的时候会重开一贴更新的,到时候希望是更有难度的题目吧. 搜索 [NOI…
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:https://www.cnblogs.com/fengxunling/p/9777606.html luogu 有趣的数 [ZJOI2007] 时态同步 [NOIP2002] 矩形覆盖 这题数据太水... 题解:https://www.cnblogs.com/fengxunling/p/984161…
Day 0 水水比赛 Day 1 写写Dp Part1:Dp基础练习 [HNOI2002]公交车路线 秒切,点数这么少,N这么大,目测O(N)+暴力更新 5min写完 P3842 [TJOI2007]线段 这题其实不难,由于每行必须走完所以落脚位置只能在线段开头/末尾,先预处理开头结尾,然后设状态的时候附加一维表示在开头结束/在结尾结束 转移就直接上一行移下来的步数+这行步数QAQ P2513 [HAOI2009]逆序对数列 前缀和优化Dp套路题 前缀和优化Dp转移方程一般都是这样的: \(F[…
BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树 题意:  约翰的奶牛们从小娇生惯养,她们无法容忍牛棚里的任何脏东西.约翰发现,如果要使这群有洁癖的奶牛满意,他不得不雇佣她们中的一些来清扫牛棚, 约翰的奶牛中有N(1≤N≤10000)头愿意通过清扫牛棚来挣一些零花钱.由于在某个时段中奶牛们会在牛棚里随时随地地乱扔垃圾,自然地,她们要求在这段时间里,无论什么时候至少要有一头奶牛正在打扫.需要打扫的时段从某一天的第M秒开始,到第E秒结束f0…
[arc073f]Many Moves(动态规划,线段树) 题面 atcoder 洛谷 题解 设\(f[i][j]\)表示第一个棋子在\(i\),第二个棋子在\(j\)的最小移动代价. 发现在一次移动结束之后,总是有一个棋子会动到当前位置,因此状态改为当前是第\(i\)次操作,第\(i\)次操作没有动的那个棋子在\(j\)位置时的最小代价. 把第一维省掉,用线段树动态维护这个数组. 每次枚举移动哪一个棋子,直接线段树对应修改即可. #include<iostream> #include<…
[BZOJ5469][FJOI2018]领导集团问题(动态规划,线段树合并) 题面 BZOJ 洛谷 题解 题目就是让你在树上找一个最大的点集,使得两个点如果存在祖先关系,那么就要满足祖先的权值要小于等于儿子的权值. 首先离散权值. 考虑一个暴力\(dp\),设\(f[i][j]\)表示以\(i\)为根,子树中被选择的最小值为\(j\)时能够被选出的最大点树.然后xjb转移一下就写出了一个\(O(n^3)\)的优秀做法. 然后把状态从恰好变成至少,然后就得到了一个\(O(n^2)\)的做法. 考虑…
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredients and a wonder-oven which can bake several types of cakes, and opened the bakery. Soon the expenses started to overcome the income, so Slastyona decid…
[agc023E]Inversions(线段树,动态规划) 题面 AT 给定\(a_i\),求所有满足\(p_i\le a_i\)的排列\(p\)的逆序对数之和. 题解 首先如何计算排列\(p\)的个数. 设\(cnt[i]\)表示\(a_k\ge i\)的个数,那么满足条件的\(p\)的总数就是\(\prod cnt[i]-(n-i)\) 大概就是从\(n\)开始填数,对于每个数字\(i\)而言,它一共有\(cnt[i]\)个位置可以填,但是后面的数字一共占用了\(n-i\)个位置,所以还剩下…
[BZOJ3672][NOI2014]购票(线段树,斜率优化,动态规划) 题解 首先考虑\(dp\)的方程,设\(f[i]\)表示\(i\)的最优值 很明显的转移\(f[i]=min(f[j]+(dep[i]-dep[j])·p[i])+q[i]\) 其中满足\(dep[i]-dep[j]\le L[i]\) 然后就可以写出一个\(O(n^2)\)的做法啦 #include<iostream> #include<cstdio> #include<cstdlib> #in…
Fence Obstacle Course Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2524   Accepted: 910 Description Farmer John has constructed an obstacle course for the cows' enjoyment. The course consists of a sequence of N fences (1 <= N <= 50,0…
RMQ是一类解决区间最值查询的算法的通称:.一共有四类:在代码中有说明: 下面是ST算法,就是动态规划做法: 来看一下ST算法是怎么实现的(以最大值为例): 首先是预处理,用一个DP解决.设a是要求区间最值的数列,f[i,j]表示从第i个数起连续2^j个数中的最大值.例如数列3 2 4 5 6 8 1 2 9 7 ,f[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数.f[1,2]=5,f[1,3]=8,f[2,0]=2,f[2,1]=4……从这里可以看出f[i,0]其实就等于…
[agc028E]High Elements(动态规划,线段树,贪心) 题面 AtCoder 你有一个\([1,N]\)的排列\(P\). 一个长度为\(N\)的字符串\(S\)是好的,当且仅当: 两个序列\(X,Y\)这样构造: 一开始,令\(X,Y\)都是空的.然后对于每一个\(i=1,2,...,N\),依次考虑每一个\(P_i\),如果\(S_i=0\),那么加入到\(X\)末尾,否则加入到\(Y\)末尾. \(X,Y\)的前缀最大值的个数相等. 现在你要求出一个字典序最小的\(S\).…
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有两个属性a,b 需要将点划分为两堆,划分依据是对于在A划分中的任意点a和在B划分中的任意点b满足 不存在当a.x>b.x时,a.y<b.y 的情况 在A划分中的点可以给出其a属性的贡献,在B划分中的点可以给出其b属性的贡献 求最大贡献和 题解: 根据题意,我们可以得出结论,我们需要找的是一根折线,…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF700E.html 题解 首先建个SAM. 一个结论:对于parent树上任意一个点x,以及它所代表的子树内任意一个点y,设节点y代表的最长串为S,设节点x代表的串为T1,T2,T3,...,设 F(S,T) 表示串T在S中的出现次数,则 F(S,T1) = F(S,T2) = F(S,T3) = ... 证明:假设串 Ta 和 Tb 在 S 中的出现次数不同,且 |Ta|+1=|Tb| 则必然存在一个位置…
题目分析: 首先想一个DP方程,令f[m][n]表示当前在前n个村庄选了m个基站,且第m个基站放在n处的最小值,转移可以枚举上一个放基站的村庄,然后计算两个村庄之间的代价. 仔细思考两个基站之间村庄的代价,会发现对于一个村庄,它需要付出代价的时候当且仅当上一个基站控制不到它,下一个基站也控制不到它,所以可以计算使它不付出代价的基站区间,然后在超过这段区间的时候加影响.具体来说就是在线段树上面加w[i].注意滚动数组. 代码: #include<bits/stdc++.h> using name…
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 -  https://www.nowcoder.com/acm/contest/145/I 题意 给定一棵有 $n$ 个节点的树,问有多少个点集的直径恰好等于 $D$ . 一个点集的直径定义为该点集中距离最远的两个点的距离. 两个点的距离定义为他们在树上的最短路径经过的边数. $n\leq 10^5$ 题解 我的做法有点难写,官方…
题目传送门 快速的vjudge通道 快速的Codeforces通道 题目大意 有$n$个火车站,第$i$个火车站出售第$i + 1$到第$a_{i}$个火车站的车票,特殊地,第$n$个火车站不出售车票. 记$\rho_{i, j}$表示从第$i$个火车站出发,到第$j$个火车站最少要购买的车票数. 求$\sum_{i = 1}^{n - 1}\sum_{j=i + 1}^{n}\rho_{i,j}$. 对于在$[i + 1, a_{i}]$中的火车站,肯定直接购买一张从$i$出发的火车票,然后就…
A string t is called nice if a string "2017" occurs in t as a subsequence but a string "2016" doesn't occur in t as a subsequence. For example, strings "203434107" and "9220617" are nice, while strings "20016&q…
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC的人誓死不屈,即将于恐怖分子展开激战,准备让一个人守着A区,这样恐怖分子就不能炸掉服务器了.(一个人就能守住??这人是机械战警还是霹雳游侠?)但是问题随之出现了,由于DustII中风景秀丽,而且不收门票,所以n名反恐精英们很喜欢在这里散步,喝茶.他们不愿意去单独守在荒无人烟的A区,在指挥官的一再命令…
离散化后,容易想到设f[i][j]为i节点权值为j的概率,不妨设j权值在左子树,则有f[i][j]=f[lson][j](pi·f[rson][1~j]+(1-pi)·f[rson][j~m]). 考虑用线段树合并优化这个dp.记录前缀和,合并某节点时,若某棵线段树在该节点处为空,给另一棵线段树打上乘法标记即可.注意前缀和不要算成合并后的了. #include<iostream> #include<cstdio> #include<cmath> #include<…
[BZOJ3939][Usaco2015 Feb]Cow Hopscotch Description Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a variant of the game for themselves to play. Being played by clumsy animals weighing nearly a ton, Cow Hopscotc…
相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个时候有两种显然的暴力. 将点集划分成两部分使内部无边显然就是二分图,于是第一种暴力是在逆序对之间连边,答案即为2连通块个数,因为每个连通块都可以交换黑白点.问题在于暴力连边是n2的,而显然实际有用的边其实只有O(n)条.考虑这样一种连边方式:每个点向后缀最小值.前缀第一个比他大的点连边.瞎归纳归纳就可以证…
显然可以dp:设f[i]为前i个人最多能分多少组,则f[i]=max{f[j]}+1 (cmax<=i-j<=dmin). 容易发现d的限制是一段连续区间,二分或者随便怎么搞都行.c则有点麻烦,考虑分治.找到区间中c最大的位置,处理左边区间再向右边(包括该位置)转移,最后处理右边区间(当然就是cdq分治). 考虑怎么转移.设当前区间为[l,r],分段点为k,处理的左边位置为i,右边位置j的限制区间为[aj,j-1],aj单调不降.若i能更新j,则满足i+ck<=j且i>=aj.显然…