上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 27 下一页
摘要: 传送门 解题思路 dp[i][j]表示把区间[i...j]涂成目标颜色的最少步骤。 当s[i]==s[j]时,我们可以发现,在涂第i个格子时,我们可以多涂上一格,将第j格涂上;同理,可以在涂第j个格子时,多图一个格子,把第i格涂上。所以就可以从dp[i+1][j]和dp[i][j-1]转移而来。 对 阅读全文
posted @ 2020-02-24 22:32 尹昱钦 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 用dp[i][j]表示dp[i][j]能否合成一个数,负无穷表示合不成,否则即为合成的数。 然后枚举k,很显然,如果dp[i][k]==dp[k+1][j],dp[i][j]就可以从前面两个转化过来。 最后对所有的任意长度的区间取一个max。 AC代码 1 #include<ios 阅读全文
posted @ 2020-02-24 22:07 尹昱钦 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 个人感觉难度应该在蓝题左右 (可能是我太弱了趴) 首先我们知道,那个所谓的头标记和尾标记,在合并区间[l...r]时,n和m是确定了的(即l的头标记和r的尾标记),只差中间的r,所以我们可以枚举k(断点)。 然后我们又可以得出,对于合并区间[l...r],最终得分为(dp[i][k 阅读全文
posted @ 2020-02-24 21:04 尹昱钦 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 对于整个中序遍历,做一遍区间dp: 枚举区间[l...r]内的所有节点作为根节点,然后计算出得分,若比当前的值要大,同时更新dp值和root[l][r](为了输出先序遍历)。 先序是根左右,所以递归输出就好了。 AC代码 1 #include<iostream> 2 #includ 阅读全文
posted @ 2020-02-24 19:31 尹昱钦 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 区间dp:一般dp[i][j]表示区间i...j的答案,这个答案可以从某个或某些小区间转移而来。 大部分题的解法就是先枚举做外层循环len,表示区间长度,然后枚举区间左端点i,然后计算出右端点j,然后枚举i到j中的所有断点,根据dp[i][k],dp[k+1][j]计算出dp[i] 阅读全文
posted @ 2020-02-22 18:35 尹昱钦 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 就是对于每个点,找到左面和右面第一个比它大的点。 单调栈解决。 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 const int maxn=100000 阅读全文
posted @ 2020-02-22 17:57 尹昱钦 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 就是对于每一个奶牛,求右边第一个比它高的位置。 很显然,单调栈。 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 const int maxn=10000 阅读全文
posted @ 2020-02-16 17:49 尹昱钦 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 主要思想是断环为链。 把数组开双倍大小,然后在n后面接上1~n-1,这样的好处是所有的长度为n的链都包含在内。 然后对于每一个长度为n的区间i......j,我们要做的是判断是否存在一个点k,使得i.....k的和小于0。 对的,和! 前缀和! 然后要找一个最小的前缀和! 长度为n 阅读全文
posted @ 2020-02-15 23:51 尹昱钦 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 传送门 真是一道毒瘤题(弄了接近一下午+一晚上) 解题思路 先对所有的点按照a-b-c的优先值从小到大排序,然后去重(注意要记录每一个有几个重复的,因为条件是小于等于,所以重复的对答案也有影响),然后再按照关键字b归并排序,排序过程中,用树状数组记录c值,每一次合并时如果是右半部分的b值较小,答案就 阅读全文
posted @ 2020-02-15 22:49 尹昱钦 阅读(131) 评论(1) 推荐(0) 编辑
摘要: 传送门 解题思路 首先看g函数的求法,很显然是个前缀和,于是题目就变成了求(i-j)^2+(s[i]-s[j])^2的最小值,所以就变成了求平面最近点对。 注意这里没有根号,为此还sb般地询问了Candy?大佬。 然后分治求一下就ok了。 欣赏一下cf强大的测试数据吧(满满的全是绿色): AC代码 阅读全文
posted @ 2020-02-15 12:04 尹昱钦 阅读(501) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 按照x的大小分治。 然后归并排序。 归并时按照y值。 然后步入难点: 假设我们已经求出了左半部分的最近距离和右半部分的最近距离,两个距离的较小值设为d。 然后我们把划分左右两部分的中线的x值定为midx。 很显然,最终的答案有三种情况: 两点在左半部分 两点在右半部分 一个点在左边 阅读全文
posted @ 2020-02-14 19:00 尹昱钦 阅读(445) 评论(2) 推荐(0) 编辑
摘要: 传送门 解题思路 就是个简单的模板。 本来不想写题解的,但是这次单调队列写得好短呀!QAQ 见模板:单调队列 AC代码 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 int n,k 阅读全文
posted @ 2020-02-02 19:05 尹昱钦 阅读(209) 评论(0) 推荐(1) 编辑
摘要: 洛谷: P1963 [NOI2009]变换序列 P2516 [HAOI2010]最长公共子序列 当然如果有哪位大佬会并且愿意给蒟蒻讲一讲的我感激不尽。 (QQ:836512090) 阅读全文
posted @ 2020-01-31 23:47 尹昱钦 阅读(100) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 我们可以先来到最终状态,第i,i位置都是黑色,然后考虑怎样可以转换过来,我们可以发现,当列与列交换时(a,b)(b,a)两个点可以通过a,b两列的交换得到正确的位置(a,a)(b,b),所以我们现在就是要确定是否每一行都对应着独特的一列。 这就很显然了——二分图。 行为A,列为B, 阅读全文
posted @ 2020-01-31 23:15 尹昱钦 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 其实这道题和上一道题很像[SCOI2010]连续攻击游戏 这道题就是题目和锦囊连边,然后题目从1开始往后枚举,注意也是如果一道答错就结束,输出答案。 然后注意n是锦囊,m是题目,别弄反了。 (ps:弄反了也能得90分!!) (数据真水!) AC代码 1 #include<iostr 阅读全文
posted @ 2020-01-31 19:24 尹昱钦 阅读(143) 评论(0) 推荐(0) 编辑
上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 27 下一页