BZOJ1187 [HNOI2007]神奇游乐园(插头dp)
麻麻我会写插头dp了!
推荐陈丹琦论文:https://wenku.baidu.com/view/3e90d32b453610661ed9f4bd.html
破题调一年
#include <cstdio>
#include <cstring> const int N=<<;
int n,m,tt,a1=0xcfcfcfcf,st[],a[][],b[N],g[N][],f[][][N];
void up(int &x,int y) {if(x<y) x=y;}
void dfs(int x,int s,int k) {
if(x==m+) {
if(!k) {
for(int i=,tp=;i<m;i++) {
int t=(s>>(i*))&;
if(t==) st[++tp]=i;
else if(t==) g[s][i]=st[tp],g[s][st[tp]]=i,tp--;
}
b[++tt]=s;
} return;
}
dfs(x+,s<<,k),dfs(x+,s<<|,k+);
if(k) dfs(x+,s<<|,k-);
} int main() {
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) for(int j=;j<=m;j++) scanf("%d",&a[i][j]);
memset(f,0xcf,sizeof f),f[][][]=,f[][][(<<(m*))|(*(<<(m-)*))]=a[][],dfs(,,);
for(int i=;i<=n;i++) {
for(int j=;j<m;j++) {
for(int k=;k<=tt;k++) if(f[i][j][b[k]]!=0xcfcfcfcf) {
int t1=(b[k]>>((m-j)*))&,t2=(b[k]>>((m-j-)*))&,t3=<<((m-j)*),t4=<<((m-j-)*);
int s=b[k]&((<<((m+)*))--t3*-t4*),t=f[i][j][b[k]]+a[i][j+];
if(!t1&&!t2) up(f[i][j+][s],t-a[i][j+]),up(f[i][j+][s|t3|(t4*)],t);
else if(!t1) up(f[i][j+][s|(t3*t2)],t),up(f[i][j+][s|(t4*t2)],t);
else if(!t2) up(f[i][j+][s|(t3*t1)],t),up(f[i][j+][s|(t4*t1)],t);
else if(t1==&&t2==) up(f[i][j+][s-(<<(g[b[k]][m-j-]*))],t);
else if(t1==&&t2==) {
if(b[k]==t3+t4*&&a1<t) a1=t;
} else if(t1==&&t2==) up(f[i][j+][s],t);
else up(f[i][j+][s+(<<(g[b[k]][m-j]*))],t);
}
}
for(int k=;k<=tt;k++) if(f[i][m][b[k]]!=0xcfcfcfcf) {
int t1=(b[k]>>(m*))&,t3=<<(m*),t4=<<((m-)*),s=(b[k]&((<<(m*))-))>>,t=f[i][m][b[k]]+a[i+][];
if(!t1) up(f[i+][][s],t-a[i+][]),up(f[i+][][s|t3|(t4*)],t);
else up(f[i+][][s|(t3*t1)],t),up(f[i+][][s|(t4*t1)],t);
}
}
printf("%d",a1);
return ;
}
BZOJ1187 [HNOI2007]神奇游乐园(插头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发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...
- [HNOI2007][bzoj1187] 神奇游乐园 [插头dp]
题面: 传送门 给定一个四联通棋盘图,每个格子有权值,求一条总权值最大的回路 思路: 插头dp基础教程 棋盘? 回路? n,m<=10? 当然是插头dp啦~\(≧▽≦)/~ 然后发现这道题并不是 ...
- [bzoj1187][HNOI2007]神奇游乐园
来自FallDream的博客,未经允许,请勿转载,谢谢, 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一 ...
- 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告
P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...
- [HNOI2007]神奇游乐园(插头DP)
题意:n*m的矩阵内值有正有负,找一个四连通的简单环(长度>=4),使得环上值的和最大. 题解:看到2<=m<=6和简单环,很容易想到插头DP,设f[i][j][k]表示轮廓线为第i ...
- 洛谷P3190 [HNOI2007]神奇游乐园(插头dp)
传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上 ...
- 【bzoj1187】 HNOI2007—神奇游乐园
http://www.lydsy.com/JudgeOnline/problem.php?id=1187 (题目链接) 题意 一个$n*m$的矩阵,其中每一个位置有一个权值,求一条回路使得经过的位置的 ...
随机推荐
- Linux下关闭Tomcat残留线程
ps -ef | grep tomcat kill -9 {pid}
- token 验证
组件: https://jwt.io/#libraries-io
- 新特性GTID
什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...
- 搭建一个web服务下载HDFS的文件
需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDF ...
- 4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...
- Orm之中介模型
什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就 ...
- 【笔记】快应用QuickApp(hap) -- 构建一个微博应用
一.背景 在上次和小伙伴分享了快应用(后面简称hap)后,有很多待定的思路没有去尝试.这周有时间简单开发了一个热门微博的应用,主要涉及到的难点:富文本.长列表.画廊.这里将整个开发过程中遇到的问题以及 ...
- mysql中出现Unknown column 'qwe' in 'field list'的错误
下面是我建表的代码 输入数据的代码 可以看到出现了类似Unknown column 'qwe' in 'field list'的错误 当时看了好久改了又改都没有找到错误,直道我在一次打C语言代码的过程 ...
- Yii2 数据库操作汇总
对象操作 查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->fi ...
- 最短路径之Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...