11 2020 档案

摘要:给出两个字符串$a,b$,在$a$中找一个子串,$b$中找一个子串,求最大贡献值 考虑$dp[i][j]$表示a中以$i$结尾,b中以$j$结尾时的最大值 考虑如果两个字符相同,那么值就加2,\(dp[i][j] = max(dp[i - 1][j - 1], 0) + 2\) 如果两个字符不相同, 阅读全文
posted @ 2020-11-30 16:56 Emcikem 阅读(89) 评论(0) 推荐(0)
摘要:传送门 操作: 区间$[1, x]$进行修改,把$a_i = max(a_i, y)$ 区间查询,求最大的$r$,满足$sum(x,r) \leq y$ 维护一下区间最大值和区间最小值,考虑到如果说某个区间的最大值$\leq y$,那么就变成了区间覆盖了,把区间的值都变成$y$。 如果说区间最小值都 阅读全文
posted @ 2020-11-24 14:48 Emcikem 阅读(103) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2020-11-18 02:07 Emcikem 阅读(3) 评论(0) 推荐(0)
摘要:传送门 每次从区间的左端点选择或者从右端点进行选择 逆着就是从中间进行向两边进行扩展。 因为左区间是向左边扩展,右区间是向右区间扩展,二维遍历一下左右区间,左区间是从[n,1],右区间是[i+1,n] 因为当前区间是[i,j],表示已经进行了j - i次,当前是n - (j - i)次操作 状态转移 阅读全文
posted @ 2020-11-17 19:52 Emcikem 阅读(106) 评论(0) 推荐(0)
摘要:在二维dp里面,得到了dp值,那么反着变量,如果当前的dp值等于ans,那么当前值就是满足的解,并且ans--。 比如在最长上升子序列里面 ans就是最长上升子序列的长度。 因为如果当前值就是ans的话,表示当前值是更新后的值。 printf("%d\n", ans); std::vector<in 阅读全文
posted @ 2020-11-16 22:32 Emcikem 阅读(112) 评论(0) 推荐(0)
摘要:传送门 首先把题目给的边加入,然后对于火车来说,加入火车边有可能似的路径更短,所以说把火车的边也要加进去,那么最后看下起点到k个终点的路径的最短路是通过火车直达的还是通过其他边到达的就行了。 就是这一步,如果说火车到达v点,而起点到v点的最短路小于火车的路径,就拆掉,如果等于路径,看一下到达这个点的 阅读全文
posted @ 2020-11-10 19:04 Emcikem 阅读(91) 评论(0) 推荐(0)
摘要:传送门 给出一个序列,最大化区间和减去该区间的最大值 首先,如果是对于负数的情况,答案肯定是0 那么只需要知道正数的情况即可 枚举最大值,然后进行查找就行了,套最大连续子序列和 如果说存在a[i] > mx,就相当于这一段区间的最大值不是这个,就重新计算区间和 #include <iostream> 阅读全文
posted @ 2020-11-06 18:55 Emcikem 阅读(83) 评论(0) 推荐(0)
摘要:博弈的题大多数用sg函数打表找规律 博弈的题大多数用sg函数打表找规律 博弈的题大多数用sg函数打表找规律 记忆话搜索可以更快 记忆话搜索可以更快 记忆话搜索可以更快 理解 定义sg值为0时表示后手必胜,sg为1时为先手必胜。 那么对于每一个人,都会去查找使得当前状态变成sg值为0的情况 那么就是说 阅读全文
posted @ 2020-11-02 22:25 Emcikem 阅读(1291) 评论(0) 推荐(0)