02 2020 档案
摘要:传送门 解题思路 先明确一下题意,c指的是路灯的编号而不是位置。 然后根据贪心,在从点i去关点j的路灯时,所有经过的路灯都会随手关掉(不耗时间),所以我们可以确定,若i点和j点的路灯已经关闭,那么区间i...j的路灯已经全部关闭,而且关完后,最优策略一定是在点i处或者点j处。 这和上一题就很像了,用
阅读全文
摘要:传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案总数,同理,用dp[i][j][1]表示区间i...j最后一个加入的人站在j位置上的方案总数。 然后
阅读全文
摘要:传送门 解题思路 dp[i][j]表示把区间[i...j]涂成目标颜色的最少步骤。 当s[i]==s[j]时,我们可以发现,在涂第i个格子时,我们可以多涂上一格,将第j格涂上;同理,可以在涂第j个格子时,多图一个格子,把第i格涂上。所以就可以从dp[i+1][j]和dp[i][j-1]转移而来。 对
阅读全文
摘要:传送门 解题思路 用dp[i][j]表示dp[i][j]能否合成一个数,负无穷表示合不成,否则即为合成的数。 然后枚举k,很显然,如果dp[i][k]==dp[k+1][j],dp[i][j]就可以从前面两个转化过来。 最后对所有的任意长度的区间取一个max。 AC代码 1 #include<ios
阅读全文
摘要:传送门 解题思路 个人感觉难度应该在蓝题左右 (可能是我太弱了趴) 首先我们知道,那个所谓的头标记和尾标记,在合并区间[l...r]时,n和m是确定了的(即l的头标记和r的尾标记),只差中间的r,所以我们可以枚举k(断点)。 然后我们又可以得出,对于合并区间[l...r],最终得分为(dp[i][k
阅读全文
摘要:传送门 解题思路 对于整个中序遍历,做一遍区间dp: 枚举区间[l...r]内的所有节点作为根节点,然后计算出得分,若比当前的值要大,同时更新dp值和root[l][r](为了输出先序遍历)。 先序是根左右,所以递归输出就好了。 AC代码 1 #include<iostream> 2 #includ
阅读全文
摘要:传送门 解题思路 区间dp:一般dp[i][j]表示区间i...j的答案,这个答案可以从某个或某些小区间转移而来。 大部分题的解法就是先枚举做外层循环len,表示区间长度,然后枚举区间左端点i,然后计算出右端点j,然后枚举i到j中的所有断点,根据dp[i][k],dp[k+1][j]计算出dp[i]
阅读全文
摘要:传送门 解题思路 就是对于每个点,找到左面和右面第一个比它大的点。 单调栈解决。 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 const int maxn=100000
阅读全文
摘要:传送门 解题思路 就是对于每一个奶牛,求右边第一个比它高的位置。 很显然,单调栈。 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 const int maxn=10000
阅读全文
摘要:传送门 解题思路 主要思想是断环为链。 把数组开双倍大小,然后在n后面接上1~n-1,这样的好处是所有的长度为n的链都包含在内。 然后对于每一个长度为n的区间i......j,我们要做的是判断是否存在一个点k,使得i.....k的和小于0。 对的,和! 前缀和! 然后要找一个最小的前缀和! 长度为n
阅读全文
摘要:传送门 真是一道毒瘤题(弄了接近一下午+一晚上) 解题思路 先对所有的点按照a-b-c的优先值从小到大排序,然后去重(注意要记录每一个有几个重复的,因为条件是小于等于,所以重复的对答案也有影响),然后再按照关键字b归并排序,排序过程中,用树状数组记录c值,每一次合并时如果是右半部分的b值较小,答案就
阅读全文
摘要:传送门 解题思路 首先看g函数的求法,很显然是个前缀和,于是题目就变成了求(i-j)^2+(s[i]-s[j])^2的最小值,所以就变成了求平面最近点对。 注意这里没有根号,为此还sb般地询问了Candy?大佬。 然后分治求一下就ok了。 欣赏一下cf强大的测试数据吧(满满的全是绿色): AC代码
阅读全文
摘要:传送门 解题思路 按照x的大小分治。 然后归并排序。 归并时按照y值。 然后步入难点: 假设我们已经求出了左半部分的最近距离和右半部分的最近距离,两个距离的较小值设为d。 然后我们把划分左右两部分的中线的x值定为midx。 很显然,最终的答案有三种情况: 两点在左半部分 两点在右半部分 一个点在左边
阅读全文
摘要:传送门 解题思路 就是个简单的模板。 本来不想写题解的,但是这次单调队列写得好短呀!QAQ 见模板:单调队列 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 int n,k
阅读全文