[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连接error,Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection .....
完整error Establishing SSL connection without server's identity verification is not recommended. Accor ...
- DB2去重的几种方法
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 例如下表:table1 用户办理套餐的记 ...
- JMeter测试TCP服务器遇到的一个奇怪问题
今天工作需要测TCP服务器的压力,因为tsung测试TCP需要写的脚本实在头大,于是换了JMETER来搞压力测试.在实际测试的过程中,遇到了一个很奇怪的问题,就是发了数据包以后,JMeter不停地报5 ...
- JavaScript随机生成颜色以及十六进制颜色 与RGB颜色值的相互转换
/** * 随机生成颜色 * @return 随机生成的十六进制颜色 */ function randomColor(){ var colorStr=Math.floor(Math.random()* ...
- flask之jinja2模板语言
一.jinja2简单介绍 Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的 ...
- Django的Serializers的使用
Serializer 在这里通过一个验证用户身份的例子说明rest_framework中serializer.Serialize的使用. 编写serializer Serializer的使用不需要依赖 ...
- C# 连接 postgres失败
小程序完成了,要发布到客户的服务器上: 我的测试机:win10 64 数据库:PG9.6.5 64 客户服务器:win7 32 数据库: ...
- Hibernate笔记7--JPA CRUD
1.环境搭建,注意包结构的问题,src下建立名为META-INF的文件夹,放persistence.xml,位置放错,读不到会报错. <?xml version="1.0" ...
- PL/SQL中模拟EBS上下文
有时,我们需要查询的表或视图,是具有OU屏蔽的,这时我们就需要模拟EBS中的上下文来实现查询数据. BEGIN fnd_global.apps_initialize(user_id =>1,re ...
- ansible基本操作
ansible优点:redhat自带工具,可通过rpm或yum直接安装:客户端免安装:操作通过ssh验证操作:可以通过自定义hosts文件对可操作主机进行分类,方便批量操作 #ansible操作格式, ...