原题链接 考察:区间DP+线性dp 思路一: 正向求解,f[i][j]表示[i,j]区间内应该删去的字符数.要注意的是如果i>j,那么为不合法区间,设置f[i][j] = 0.i = j,单个字符一定回文,f[i][j] = 0.接下来就是划分集合:s[i]=s[j]可缩小到f[i+1,j-1].如 ...
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+100; const int inf=1e9; int n,m,x; int dep[maxn];//节点在第几层 int num[maxn];//每一层的节点个数 int ...
分类:
其他好文 时间:
2021-02-15 11:49:10
阅读次数:
0
从[互不侵犯]一题析代码的锅 这个题,真的是,作为状压DP的敲门题,我从2020年1月份第一次见它, 到今年2月份重构过3、4遍。然后终于过了。 憨批行为之一 我有一次在寻找合法状态的时候,逐位枚举?甚至还枚举$1$的个数啊、搜索啊...... 正确的做法是 for(int s = (1 << n) ...
分类:
其他好文 时间:
2021-02-15 11:39:35
阅读次数:
0
个人对dp的理解: 记忆化,先求出小问题的最优解,然后状态转移逐步求出原问题的解。递推是神,des。 使用dp前提: 能拆分为子问题并能求出状态转移方程,原问题是最优解的同时子问题也都是最优解。 无后效性,也就是一个状态的值只与当前有关,此刻求出多少就是多少。且不会因为达到最优地方式的不同而影响未来 ...
分类:
其他好文 时间:
2021-02-10 13:18:35
阅读次数:
0
困难题,先想着DP扫描,但是会爆栈; 主体思想仍然采用滑动窗口来进行; 但是对于该题目,有一个比较新的点,要利用脑经急转弯思想把问题转换一下; 对于正好为K个不同元素组成的最长字符串可以转换为: 最多由K个不同元素组成的字符串-最多由K-1个不同元素组成的字符串; (这样可以有效的降低复杂度,使得单 ...
分类:
编程语言 时间:
2021-02-10 13:13:44
阅读次数:
0
题目链接 题目大意 给你n个物品,每个物品有两个值一个为a,一个为b 要你拿任意的物品使得$\sum a/ \sum b=k ,且max(\sum a)$ \(1<=n<=100\; 1<=k=10\; 1<=a[i],b[i]<=100\) 题目思路 一个显然易见的思路设$dp[i][j]\(为是 ...
分类:
其他好文 时间:
2021-02-10 13:10:08
阅读次数:
0
原题链接 考察:背包dp 错误思路: f[i,j] j表示和 此思路必错,会MLE. 正确思路: 需要转换式子.已知 x + x+d1 + x+d1 +d2+x+d1+d2+d3...=s 等价于 nx+(n-1)d1+(n-2)d2+.. = s. s与n已知,d在a与b徘徊,而x的范围太广,因此 ...
类似cf582E,先建出表达式树,然后树形dp+离散+min和max卷积的优化,复杂度为$o(nm|E|)$,无法通过 考虑我们仅关心于这$n$个数的大小关系,具体来说,假设给出的数组是$a_{i,j}$(其中$0\le i<m,1\le j\le n$),对于某一个$j$,将$a_{i,j}$从小 ...
分类:
其他好文 时间:
2021-02-08 11:56:15
阅读次数:
0
#include <bits/stdc++.h> const int N=200005; int n,v,a[N],dl[N][20],dr[N][20],pre[1<<20],suf[1<<20],dp[N],W; int main(){ scanf("%d%d",&n,&v); for (int ...
分类:
其他好文 时间:
2021-02-08 11:41:40
阅读次数:
0
#include <bits/stdc++.h> typedef long long ll; ll dp[40][40][40],ans; int n,a[40][40]; char s[40]; ll dfs(int l,int r,int mid){ if (l==r) return 1; if ...
分类:
其他好文 时间:
2021-02-08 11:40:55
阅读次数:
0