单路径最大和问题,设f[i][j][S]表示到达(i,j),轮廓线状态为S的最优解。
S用4进制m+1位数表示,0表示无插头,1表示左括号,2表示右括号,3表示独立插头。
在DP之前先进行一次预处理,剔除无效状态,并预处理出与每个括号匹配的另一个括号的位置,有效状态只有8000个左右。
然后分类讨论进行转移即可。
#include<cstdio>
const int N=9,M=8320,inf=-1000000000;
int n,m,S,i,j,k,h,z,ans=inf,q[M],id[1<<(N*2)],pre[M],now[M];
char can,c3,st[N+1],p[M][N],tmp[N];
inline int bit(int x,int i){return x>>(i<<1)&3;}
inline void up(int&a,int b){if(a<b)a=b;}
inline void clr(){for(int k=1;k<=q[0];k++)now[k]=inf;}
inline void nxt(){for(int k=1;k<=q[0];k++)pre[k]=now[k];}
int main(){
scanf("%d%d",&n,&m);
S=1<<(2*(m+1));
for(i=0;i<S;i++){
can=1,st[0]=c3=0;
for(j=0;j<=m;j++){
k=bit(i,j);
if(k==1)st[++st[0]]=j;
if(k==2){
if(!st[0]){can=0;break;}
tmp[st[st[0]]]=j;tmp[j]=st[st[0]];
st[0]--;
}
if(k==3)if((++c3)>2){can=0;break;}
}
if(can&&!st[0]){
q[id[i]=++q[0]]=i;
for(j=0;j<=m;j++)p[q[0]][j]=tmp[j];
}
}
clr();
now[1]=0;
nxt();
for(i=1;i<=n;i++){
clr();
for(k=1;k<=q[0];k++)if(pre[k]>inf&&!bit(q[k],m))now[id[q[k]<<2]]=pre[k];
nxt();
for(j=1;j<=m;j++){
scanf("%d",&z),up(ans,z),clr();
for(h=1;h<=q[0];h++)if(pre[h]>inf){
int v=pre[h]+z,k=q[h],x=bit(k,j-1),y=bit(k,j),e=k^(x<<((j-1)<<1))^(y<<(j<<1));
if(!x&&!y){
up(now[h],v-z);
up(now[id[e^(1<<((j-1)<<1))^(2<<(j<<1))]],v);
up(now[id[e^(3<<((j-1)<<1))]],v);
up(now[id[e^(3<<(j<<1))]],v);
}else if(!x||!y){
int t=x+y;
up(now[id[e^(t<<((j-1)<<1))]],v);
up(now[id[e^(t<<(j<<1))]],v);
if(t==3){if(!e)up(ans,v);}
else{
if(x)up(now[id[e^(x<<(p[h][j-1]<<1))]],v);
else up(now[id[e^(y<<(p[h][j]<<1))]],v);
}
}else if(x==1&&y==1)up(now[id[e^(3<<(p[h][j]<<1))]],v);
else if(x==2&&y==1)up(now[id[e]],v);
else if(x==2&&y==2)up(now[id[e^(3<<(p[h][j-1]<<1))]],v);
else if(x==3&&y==3){if(!e)up(ans,v);}
else if(x==3)up(now[id[e^(y<<(p[h][j]<<1))]],v);
else if(y==3)up(now[id[e^(x<<(p[h][j-1]<<1))]],v);
}
nxt();
}
}
return printf("%d",ans),0;
}
BZOJ2310 : ParkII的更多相关文章
-
2019.01.24 bzoj2310: ParkII(轮廓线dp)
传送门 题意简述:给一个m*n的矩阵,每个格子有权值V(i,j) (可能为负数),要求找一条路径,使得每个点最多经过一次且点权值之和最大. 思路:我们将求回路时的状态定义改进一下. 现在由于求的是路径 ...
-
插头dp初探
问题描述 插头dp用于解决一类可基于图连通性递推的问题.用插头来表示轮廓线上的连通性,然后根据连通性与下一位结合讨论进行转移. 表示连通性的方法 与字符串循环最小表示不同,这种方法用于给轮廓线上的联通 ...
-
插头dp题表
bzoj1814: Ural 1519 Formula 1 bzoj3125: CITY bzoj1210: [HNOI2004]邮递员 bzoj2331: [SCOI2011]地板 bzoj1187 ...
-
【BZOJ2310】ParkII 插头DP
[BZOJ2310]ParkII Description Hnoi2007-Day1有一道题目 Park:给你一个 m * n 的矩阵,每个矩阵内有个权值V(i,j) (可能为负数),要求找一条回路, ...
-
[入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样 ...
-
【BZOJ】2310: ParkII 插头DP
[题意]给定m*n的整数矩阵,求经过所有点至多一次路径的最大数值和.n<=8,m<=100. [算法]插头DP [题解]最小表示法确实十分通用,处理简单路径问题只需要状态多加一位表示独立插 ...
-
bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
-
「总结」插头$dp$
集中做完了插头$dp$ 写一下题解. 一开始学的时候还是挺蒙的. 不过后来站在轮廓线$dp$的角度上来看就简单多了. 其实就是一种联通性$dp$,只不过情况比较多而已了. 本来转移方式有两种.逐行和逐 ...
-
「插头dp」
Tasklist: 标识设计 神奇游乐园 Manhattan Wiring ParkII 游览计划 CITY: 只用一条回路经过所有可通过的块 括号匹配,注意结束位置不一定是(n,m) 地板: 分已经 ...
随机推荐
-
asp.net下ajax.ajaxMethod使用方法
使用AjaxMethod可以在客户端异步调用服务端方法,简单地说就是在JS里调用后台.cs文件里的方法,做一些JS无法做到的操作,如查询数据库. 使用AjaxMethod要满足一下几点: 1.如果 ...
-
win7为鼠标右键添加“用Photoshop编辑”选项
1. 确认你注册表编辑器下,HKEY_CLASSES_ROOT\Applications\Photoshop.exe下的shell下的open下的command的右侧默认键值为 "D:\Ad ...
-
[Jquery] Jquery获取浏览器宽高的代码
<script type="text/javascript"> $(document).ready(function() { alert($(window).heigh ...
-
基于ASP.NET的comet简单实现 http长连接,IAsyncResult
http://www.cnblogs.com/hanxianlong/archive/2010/04/27/1722018.html 我潜水很多年,今天忽然出现.很久没写过博客了,不是因为不想写,而是 ...
-
RegexOptions枚举
在创建Regex类的实例时,构造函数的重载中有一个要求传入RegexOptions的一个枚举值,我相信这个枚举一定非常有用,否则不会要求在构造函数中传入.今天就来看一看这个枚举的作用. 我们干脆把代码 ...
-
uclibc和glibc的差别
uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题. 1. uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc编 ...
-
毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
-
ResNet网络再剖析
随着2018年秋季的到来,提前批和内推大军已经开始了,自己也成功得当了几次炮灰,不过在总结的过程中,越是了解到自己的不足,还是需要加油. 最近重新复习了resnet网络,又能发现一些新的理念,感觉很f ...
-
react native初始化项目
打开命令行窗口,进入我们想要创建项目的父目录,输入命令: npm install -g yarn react-native-cli react-native init 项目名 进入新建的项目目录,执行 ...
-
textarea 带换行符保存数据与带换行符展示数据
毕业设计进行ing~ 最近要想要实现一个站内邮箱,想要带换行地输出邮件主体内容. 这两天为了解决这个问题百度了好多东西,发现相关问题有很多记录,可能这确实是大多数初学者也碰到的问题.自己找了好多地方都 ...