[BZOJ1187]神奇游乐园(插头DP)
Description
题意给定一个矩阵,每个格子有权值,在[-1000.1000]内,求一条回路使得回路经过权值和最大,每个格子最多经过一次
2≤n≤100,2≤m≤6
Code
#include <cstdio>
#include <algorithm>
#define N 10
#define Inf 0x7fffffff
using namespace std;
int A[N],now,op[N],k[N],L[N],Ans=-Inf;
int n,m,g[110][N],dp[2][20000],q[2][20000],t[2];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void push(int x,int y){
if(dp[now^1][x]==-Inf) q[now^1][++t[now^1]]=x;
dp[now^1][x]=max(dp[now^1][x],y);
}
void clear(){
for(int i=1;i<=t[now];++i) dp[now][q[now][i]]=-Inf;
t[now]=0;
now^=1;
}
void f(int S){
int tp=0;
for(int i=0;i<=m;++i){
k[i]=S&3,S>>=2;//
if(k[i]==1) L[++tp]=i;
else if(k[i]==2) op[op[i]=L[tp--]]=i;
}
}
void bfs(int x,int y){
clear();
for(int i=1;i<=t[now];++i){
int S=q[now][i];
f(S);
int l=k[y-1],r=k[y],upd=dp[now][S]+g[x][y];
if(!l&&!r){
push(S,upd-g[x][y]);
push(S+A[y-1]+(A[y]<<1),upd);
}else if(l&&r){
int tS=S-l*A[y-1]-r*A[y];
if(l==2&&r==1) push(tS,upd);
else if(l==1&&r==1) push(tS-A[op[y]],upd);
else if(l==2&&r==2) push(tS+A[op[y-1]],upd);
else if(!tS) Ans=max(Ans,upd);
}
else{
push(S,upd);
push(S-l*A[y-1]-r*A[y]+l*A[y]+r*A[y-1],upd);
}
}
}
int main(){
A[0]=1;for(int i=1;i<N;++i)A[i]=A[i-1]<<2;//四进制
for(int i=0;i<2;++i)for(int j=0;j<20000;++j)dp[i][j]=-Inf;
n=read(),m=read();
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)g[i][j]=read();
push(0,0);
for(int i=1;i<=n;++i){
clear();
for(int j=1;j<=t[now];++j) if(q[now][j]<A[m]) push(q[now][j]<<2,dp[now][q[now][j]]);
for(int j=1;j<=m;++j) bfs(i,j);
}
printf("%d\n",Ans);
return 0;
}
[BZOJ1187]神奇游乐园(插头DP)的更多相关文章
- [HNOI2007][bzoj1187] 神奇游乐园 [插头dp]
题面: 传送门 给定一个四联通棋盘图,每个格子有权值,求一条总权值最大的回路 思路: 插头dp基础教程 棋盘? 回路? n,m<=10? 当然是插头dp啦~\(≧▽≦)/~ 然后发现这道题并不是 ...
- 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
[BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
- bzoj 1187: [HNOI2007]神奇游乐园 插头dp
1187: [HNOI2007]神奇游乐园 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 668 Solved: 337[Submit][Statu ...
- [bzoj1187][HNOI2007]神奇游乐园_插头dp
bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...
- BZOJ1187 [HNOI2007]神奇游乐园(插头dp)
麻麻我会写插头dp了! 推荐陈丹琦论文:https://wenku.baidu.com/view/3e90d32b453610661ed9f4bd.html 破题调一年 #include <cs ...
- [HNOI2007]神奇游乐园(插头DP)
题意:n*m的矩阵内值有正有负,找一个四连通的简单环(长度>=4),使得环上值的和最大. 题解:看到2<=m<=6和简单环,很容易想到插头DP,设f[i][j][k]表示轮廓线为第i ...
- 【插头DP】BZOJ1187- [HNOI2007]神奇游乐园
[题目大意] 在n*m的网格中选一条回路,使权值和最大. [思路] 和之前裸的插头DP差不多,只不过现在回路不需要经过所有的格子.所以有以下几个注意点(具体看注释): (1)left和up插头相等的时 ...
- 洛谷P3190 [HNOI2007]神奇游乐园(插头dp)
传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上 ...
- P3190-[HNOI2007]神奇游乐园【插头dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3190 题目大意 \(n*m\)的网格上有权值,求一条权值和最大的不交回路. \(1\leq n\leq 100, ...
随机推荐
- MySQL分库分表的技巧
分表是分散数据库压力的好方法. 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库. 当然,首先要知道什么情况下,才需要分表.个人觉得单表记录条数达到百万到千万 ...
- 用代码学习TreeView控件
private void Form1_Load(object sender,EventArgs e){ //游离对象 TreeNode tn=new TreeNode("我很好") ...
- Xcode警告忽略
Xcode中 cmd+B 之后总会出现各种各样的警告,对于一个对代码有洁癖的人,这种情况很难忍,接下来我们用些特殊手段强制消除这些警告 一.忽略源文件中的警告 使用编译器宏来操作 #pragma c ...
- JavaSE之Java基础(5)
21.简述正则表达式及其用途. 在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 22.Java ...
- System path '/Users/hxy/Library/Caches/PyCharm2018.2' is invalid.
Mac系统下安装pycharm后启动出现System path '/Users/hxy/Library/Caches/PyCharm2018.2' is invalid.问题: 1.出现原因: 1.1 ...
- 原生css3作响应式布局
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- keil 系列问题
1.为了让keil支持stm32f0系列,安装了keil4更高级的版本,但是发现编译时弹出异常提示框,经过一番折腾后找到解决办法,首先把电脑登陆账户名改为非中文的,然后卸载了keil重装就可以了. ...
- 父类和子类以及super关键字
super和this关键字的特点类似:super代表的是父类对象的引用. 当子父类的成员出现同名时,可以通过super来进行区分. 子类的构造方法中,通过super关键字调用父类的构造方法. publ ...
- 在MVC中加载view(点开链接)的方式
主要有: Html.ActionLink Html.RenderPartial Html.RenderAction Html.Partial AJAX.ActionLink load 浏览器对象模型 ...
- C++ vector容器类型的用法及注意
转自http://www.cnblogs.com/charley_yang/archive/2010/12/11/1903040.html vector类为内置数组提供了一种替代表示,与string类 ...