区间dp学习笔记
怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)!
不管怎么样,计划不能打乱\(4\)不\(4\)。。
区间dp
模板
为啥我一开始就先弄模板呢?因为这东西看模板就能看懂。。。
for(int i=2;i<=len;i++)//枚举区间长度
{
for(int l=1,r=l+len-1;r<=n;l++,r++)//枚举左端点和右端点
{
//以下你可以搞一下事情
for(int k=l;k<r;k++)
{
//以下你还可以搞一下事情
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]);
}
}
}
以上就是区间dp的大体模板,至于为啥,感性理解一下就好了
例题
石子合并加强版
为啥我一开始就弄加强版呢?因为普通版就在加强版里面哇\(qwq\)
传送门
这道题目是说一个环形操场,然后合并成一堆的最大值和最小值
注意加粗的字体,环形操场?
好吧,这就是一个环形\(dp\),通常的就是复制一遍,断环为链,别问我为啥是这样
然后就是状态转移方程。\(dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r])\)与\(dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r])\)
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
const int N = 1000;
int n,a[1000],dpmax[N][N],dpmin[N][N],sum[N];
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]),a[i+n]=a[i];
for(int i=1; i<=n*2; i++)
sum[i]=sum[i-1]+a[i];
memset(dpmin,0x3f,sizeof(dpmin));
for(int i=1; i<=n*2; i++)dpmin[i][i]=0;
for(int len=2; len<=n; len++)
{
for(int l=1,r=len+l-1; r<=n*2; l++,r++)
{
for(int k=l; k<r; k++)
dpmax[l][r]=max(dpmax[l][r],dpmax[l][k]+dpmax[k+1][r]+sum[r]-sum[l-1])
,dpmin[l][r]=min(dpmin[l][r],dpmin[l][k]+dpmin[k+1][r]+sum[r]-sum[l-1]);
}
}
int maxn=0,minn=0x7fffffff;
for(int i=1; i<=n; i++)minn=min(minn,dpmin[i][i+n-1]),maxn=max(maxn,dpmax[i][i+n-1]);
cout<<minn<<endl<<maxn;
}
括号匹配问题
这道题也是\(dp\)问题,不算特别的裸,毕竟用到了字符串。
因为我们要判断括号的合法性,所以我们在枚举左端点和右端点的时候,只要合法,括号序列就\(+2\),也就是\(dp[l][r]=dp[l+1][r-1]+2\)这个看不懂的人不多吧
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
char s[255];
int dp[300][300];
int main()
{
while(1)
{
cin >> s+1;
if(s[1]=='e')break;
memset(dp,0,sizeof(dp));
int len=strlen(s+1);
for(int i=2; i<=len; i++)
{
for(int l=1,r=i+l-1; r<=len; l++,r++)
{
if((s[l]=='('&&s[r]==')')||(s[l]=='['&&s[r]==']'))
dp[l][r]=dp[l+1][r-1]+2;
for(int k=l; k<r; k++)
{
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]);
}
}
}
printf("%d\n",dp[1][len]);
}
}
关于区间\(dp\)还有一个东西叫做四边形不等式优化,\(emmm\)这东西以后再学
区间dp学习笔记的更多相关文章
- 区间DP 学习笔记
前言:本人是个DP蒟蒻,一直以来都特别害怕DP,终于鼓起勇气做了几道DP题,发现也没想象中的那么难?(又要被DP大神吊打了呜呜呜. ----------------------- 首先,区间DP是什么 ...
- 数位DP学习笔记
数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...
- DP学习笔记
DP学习笔记 可是记下来有什么用呢?我又不会 笨蛋你以后就会了 完全背包问题 先理解初始的DP方程: void solve() { for(int i=0;i<;i++) for(int j=0 ...
- 树形DP 学习笔记
树形DP学习笔记 ps: 本文内容与蓝书一致 树的重心 概念: 一颗树中的一个节点其最大子树的节点树最小 解法:对与每个节点求他儿子的\(size\) ,上方子树的节点个数为\(n-size_u\) ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
- 区间DP学习总结
这段时间学习了区间DP,所以试着把学到的东西稍作总结,以备不时之需. 学习区间DP首先要弄清区间DP是为了解决什么问题:一般的DP主要是特征是一次往往只操作一个数值或者存储可以不连续的物品的状态(比如 ...
- dp学习笔记(各种dp,比较杂)
HDU1176 中文题意不多解释了. 建一个二维dp数组,dp[ i ][ j ]表示第 i 秒落在 j 处一个馅饼.我们需要倒着DP,为什么呢,从 0秒,x=5处出发,假如沿数组正着往下走,终点到哪 ...
- 动态 DP 学习笔记
不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子 ...
- [总结] 动态DP学习笔记
学习了一下动态DP 问题的来源: 给定一棵 \(n\) 个节点的树,点有点权,有 \(m\) 次修改单点点权的操作,回答每次操作之后的最大带权独立集大小. 首先一个显然的 \(O(nm)\) 的做法就 ...
随机推荐
- Default Document <defaultDocument> IIS中的默认页面
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/defaultdocument/index Default do ...
- nyoj--747--蚂蚁的难题(三)(dp背包)
蚂蚁的难题(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:4 描述 蚂蚁终于把尽可能多的食材都搬回家了,现在开始了大厨计划. 已知一共有 n 件食材,每件食材有一个美味度 ...
- Linux下iscsi的使用
查看是否已安装了iscsi-initiator: [root@test\ ~]# rpm -qa |grep iscsi iscsi-initiator-utils-6.2.0.868-0.18.e ...
- git使用(公钥私钥产生--远程库添加公钥--本地库关联远程库-使用)
原文1:http://www.cnblogs.com/wangmingshun/p/5424767.html 原文2(指令):http://blog.csdn.net/xiaohanluo/artic ...
- html单行、多行文本溢出隐藏
欢迎加入前端交流群来py:749539640 单行: div{/* 单行溢出隐藏 */ width: 150px; white-space: nowrap; overflow: hidden; tex ...
- java高级——生产者消费者问题
多线程是一个很重要的应用,本节讲述多线程中同步问题 public class ThreadDemo { public static void main(String[] args) { Resourc ...
- github上下载开源项目
1.首先获取到设置信息 2.找到克隆的路径(本步骤不包含下载.zip的方法) 3.打开 Git Shell ->输入: cd ../../ ->输入: cd 想要安装的路径 ->输 ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- 50个极好的bootstrap框架
转自:http://sudasuta.com/bootstrap-admin-templates.html https://www.cnblogs.com/sanhao/p/9184323.html ...
- php如何实现文件下载
php如何实现文件下载 1. 设置超链接的href属性 <ahref="文件地址"></a> 如果浏览器不能解析该文件,浏览器会自动下载.而如果文件是图片或 ...