bzoj 4244 括号序列dp
将各种情况绕环等看作括号序列,括号内的区域上下都需要累加答案,左右也是
f[i][j] 代表 前i个车站已经处理完的有j个左括号的最小权值
我们可以发现,更新的来源来自于 i-1, 和 i
将上 描述为L1,L2, 下描述为R1,R2,所以可以通过括号内的沿伸以及左右括号的答案更新状态
具体代码如下
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define dec(i,x,y) for(register int i=x;i>=y;i--)
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;} namespace zkc{
const int N=;
int n,T,L1[N],L2[N],R1[N],R2[N],f[N][N]; inline void work(){
n=read(),T=read();
rep(i,,n) R1[i]=read(),L1[i]=read(),L2[i]=read(),R2[i]=read(); memset(f,0x3f,sizeof f);f[][]=;
rep(i,,n){
//from i-1 zhuan'yi
rep(j,,n){
if(j){//来自于i-1的转移
f[i][j]=min(f[i][j],f[i-][j-]+(j-)**T+L1[i]+L2[i]);
//第一个转移需要保证j的原因是其由左边j-1转移而来(
f[i][j]=min(f[i][j],f[i-][j]+j**T+L2[i]+R2[i]);}
//由于此条转移走的是下路,也就是已经到了下班状态,至少有一次向下的左括号还没有被匹配
//下班路上取邮戳
f[i][j]=min(f[i][j],f[i-][j]+j**T+L1[i]+R1[i]);
//上班路上取邮戳
f[i][j]=min(f[i][j],f[i-][j+]+(j+)**T+R1[i]+R2[i]);
//匹配右括号
}
//前四种转移是强行为了更新状态而走邮戳站的,底下的两种是为了更新自己此节点的反复转移的情况,即在同一节点处多次更新
rep(j,,n) f[i][j]=min(f[i][j],f[i][j-]+L1[i]+L2[i]);
//先更新小的j-1再更新大的j+1
dec(j,n-,) f[i][j]=min(f[i][j],f[i][j+]+R1[i]+R2[i]);
}
printf("%d\n",f[n][]+(n+)*T);return;
}
} int main(){
zkc::work();
return ;
}
完结撒花
不过话说回来,其实还有许多不太明白的转移顺序问题,日后慢慢理解哈
bzoj 4244 括号序列dp的更多相关文章
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- BZOJ 4244 邮戳拉力赛 (DP)
手动博客搬家: 本文发表于20181211 18:01:21, 原地址https://blog.csdn.net/suncongbo/article/details/84957907 为了防止我的博客 ...
- Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)
大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...
- bzoj 1095 括号序列求两点距离
大致题意: 给一棵树,每个节点最开始都是黑色,有两种操作,1.询问树中相距最远的一对黑点的距离 2.反转一个节点的颜色 一种做法: 建立出树的括号序列,类似这样: [A[B][C]],所以长度为3*n ...
- [LOJ#2878]. 「JOISC 2014 Day2」邮戳拉力赛[括号序列dp]
题意 题目链接 分析 如果走到了下行车站就一定会在前面的某个车站走回上行车站,可以看成是一对括号. 我们要求的就是 类似 代价最小的括号序列匹配问题,定义 f(i,j) 表示到 i 有 j 个左括号没 ...
- bzoj 1049: 数字序列 dp
题目大意: 给定一个长度为n的整数序列.在改变的数最小的和改变的幅度最小的前提下把它变成一个单调严格上升的序列.求改变的最小的数和这个幅度. 题解: (貌似以前考试考过这道题) 其实这道题就是两道题拼 ...
- bzoj 2209 括号序列
反转操作 + 翻转操作 = 对称操作 因为上面三个操作都是自己的逆操作,所以我们只需要实现对称操作和反转操作,就可以搞定翻转操作. #include <cstdio> #include & ...
- BZOJ 4244: 邮戳拉力赛
转化为括号序列DP 注意边界 #include<cstdio> #include<algorithm> #define rep(i,x,y) for (int i=x; i&l ...
- 合法括号序列(dp+组合数学)
键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...
随机推荐
- AngularJS学习之旅—AngularJS 模块(十五)
一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...
- 开启远程桌面连接windows的方法以及遇到的问题
确认电脑的远程服务是否已经开启 开始--运行--输入“services.msc ”,打开服务,找到三个remote desktop开头的服务 Remote Desktop Configuration. ...
- Linux Mint有进程管理器吗?答案是肯定的
Linux Mint系统内置了一个系统管理器,叫 "System Monitor",通过 Menu -->> 系统工具 可以查看 . 如下图,在管理器上右键,可以&qu ...
- Mysql 字符串指定位置插入空格
UPDATE flow_data_243 SET data_15=CONCAT(LEFT(data_15,10),' ',RIGHT(data_15,LENGTH(data_15)-10)) WHER ...
- 闲谈2-sat问题
问题简介 在计算机科学中,布尔可满足性问题(有时称为命题可满足性问题,缩写为SATISFIABILITY或SAT)是确定是否存在满足给定布尔公式的解释的问题.换句话说,它询问给定布尔公式的变量是否可以 ...
- 折半、快排、插入排序的Java实现
插入排序 import java.util.Arrays; public class InsertionSort { /** * 对数组里面进行插入排序 * 参数1 数组 * 参数2 数组大小 */ ...
- MySQL工作原理
Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的. mysql原理图各个组件说明: 1. connectors 与其他编程语言中的sql 语句进行交互,如php.java等. 2. M ...
- 关于配置ssh免密码登录后,仍提示输入密码
一.在A端创建密钥对: [root@A ~] -P '' 二.如果B机器没有.ssh和authorized_keys文件则创建这个文件夹和文件先,创建后要chown改成当前用户的所属者,其次也要改: ...
- webpack(一) 配置
一.entry & output mode: 'development', // entry: './src/index', // entry: ['./src/index', './src ...
- VS2013下载与安装
1. 官网下载地址: https://my.visualstudio.com/Downloads?q=visual studio 2013&wt.mc_id=o~msft~vscom~old ...