区间dp
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
Codeforces - Array Shrinking
题目链接:Array Shrinking显然最后的答案一定是多个连续的段缩成一个数,拼接而成。所以我们如果可以处理出每个段是否能缩成一个数就可以dp了。对于每个段,我们也可以区间dp。dp[i][j] 为 i ,j 这个区间能否缩成一个数,并且数的值。如果不能则为0转移枚举一个中间点即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lo原创 2021-01-21 13:07:36 · 174 阅读 · 0 评论 -
Simple AniPop
题目链接:Simple AniPop不难看出可以区间dp。所以我们考虑后面拼接一段,断环成链。然后我们令 dp[i][j] 为区间 [ i , j ] 并且 i ,j 未被消掉的最大价值。然后枚举区间 [ i +1 , j -1 ]最后消掉的位置k做转移。最后不难看出答案就是 a[i] + dp[i][i+n] 的最大值。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>原创 2020-12-01 13:20:25 · 293 阅读 · 0 评论 -
Codeforces - Yet Another Segments Subset
题目链接:Yet Another Segments Subset考虑区间dp,dp[i][j] 为区间 [ i , j ] 的最大价值。然后对于区间的合并:dp[i][j] = max{dp[i][k]+dp[k+1][j]},如果每次都考虑显然复杂度为:O(n^3),无法通过此题。但是我们可以发现如果当前存在某条线段才需要考虑切割,否则在之前已经被考虑过,故可以优化到O(n^2)然后线段值域很大,可以离散化。AC代码:#pragma GCC optimize("-Ofast","-fu原创 2020-08-07 17:00:20 · 453 阅读 · 0 评论 -
HDU - 5900
题目链接:HDU - 5900显然可以区间dp,dp[i][j] 为区间 [ i , j ] 的最大值。然后我们就可以枚举两个区间的组合,或者是枚举当前区间的两个端点组合,但是要保证中间是可以合并的。用dp数组的值判断即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const in原创 2020-08-05 12:20:58 · 201 阅读 · 0 评论 -
[TJOI2007]调整队形
题目链接:[TJOI2007]调整队形显然可以区间dp。但是如果枚举插入的位置,那么复杂度是N^3的,会TLE。但是我们可以发现插入的操作其实就是之前某个更小状态的左右加一个人的操作,所以不用管。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=3010,in原创 2020-06-04 19:57:00 · 200 阅读 · 0 评论 -
Cheapest Palindrome G
题目链接:Cheapest Palindrome G直接令 dp[i][j] 为区间 [ i , j ] 的最小代价。每次如果s[i] = s[j] 就可以直接从 dp[i+1][j-1] 当中转移。否则从 dp[i+1][j] 或者 dp[i][j-1] 转移。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#inc...原创 2020-05-05 12:03:48 · 228 阅读 · 0 评论 -
Codeforces - Zuma
题目链接:Codeforces - Zuma对于区间 [l,r] 如果两端的相等,那么可以直接变为区间[l+1,r-1]否则我们可以枚举区间的划分方案。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing n...原创 2020-03-14 09:42:47 · 378 阅读 · 0 评论 -
Codeforces - Clear the String
题目链接:Codeforces - Clear the String应该是比较暴力的区间dp了。比如当前区间为[l,r],那么要么为1+[l+1,r],要么找一个与str[l]相同的字母,缩掉中间的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#defi...原创 2020-02-21 20:38:51 · 184 阅读 · 0 评论 -
HDU - 5115
题目链接:HDU - 5115不难看出可以区间dp,不过有一些小技巧。假设当前第一个攻击的区间为【l,r】,这个区间最后死的狼是k,那么就很好转移了。如果枚举第一个死的狼,不好转移。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lo...原创 2020-02-17 13:54:41 · 322 阅读 · 0 评论 -
2019河北省大学生程序设计竞赛 - 分治
题目链接:2019河北省大学生程序设计竞赛 - 分治看到数据范围,显然区间dp。假设当前只剩(l,r)区间没打,然后枚举打哪一个即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace ...原创 2020-02-14 20:27:28 · 333 阅读 · 0 评论