luogu P3842 [TJOI2007] 线段】的更多相关文章

最近多刷些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).当然…
题目链接 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 =…
裸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)…
https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; ; #define RR freopen("gg.in", "r", stdin) int n, m; int cnt; struct node…
送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每个节点在进行了\(t\)次操作(有\(2^t\)棵树)是某个点为\(1\)的总个数,令这个值为\(f_x\) 然后考场上用了一种记录该节点+左儿子+右儿子状态的方法,这样可以把答案的贡献全部算到这个点上 但是这样细节巨多且容易算重(漏),所以考场上码了\(200+\)行最后没调出大样例 后来想了一种…
题意:给出n个区间,求选择一些区间,使得一个点被覆盖的次数超过m次,最小的花费.花费指的是选择的区间中最大长度减去最小长度. 坐标值这么大,n比较小,显然需要离散化,需要一个技巧,把区间转化为半开半闭区间,然后线段树的每一个节点表示一个半开半闭区间. 接着我们注意到需要求最小的花费,且这个花费只与选择的区间集合中的最大长度和最小长度有关. 这意味着如果最大长度和最小长度一定,我们显然是需要把中间长度的区间尽量的选择进去使答案不会变的更劣. 不妨把区间按长度排序,枚举每个最小长度区间,然后最大区间…
因为每行必须走完才能到下一行,所以我们有两种决策: 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]+…
题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护每行因一个同学离队而从第m列插♂进来的同学,还有一棵维护到队尾的同学. 具体怎么维护?比如当前的询问是(x,y),先分两种情况: 1.不在第m列. 那么我们就先看看这个同学是不是插♂进来,是的话就在那后n+1棵线段树的第x棵里找,不然就在前n+1棵的第x棵里找. 然后在对应线段树的对应位置里删除离队…
那是上上周...也是重构了四遍...后来GG了...今天又拾起,搞了搞终于过了... 好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561.html大致差不错 #include<iostream> #include<cstdio> #define R register int #define ls (tr<<1) #define rs (tr<<1|1) using namespace std;…
题目链接:P3853 [TJOI2007]路标设置 是个水二分,那你还\(WA\).很简单,就是练了练和早上那题相似的题. 二分答案即可,复杂度\(O(Nlogl)\),可以通过本题. 不过,需要注意的是,若整除,\(cnt--\),否则和我一样成\(80pts\). \(Code\): #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int l,n,k,ans=0…