P3190-[HNOI2007]神奇游乐园【插头dp】
正题
题目链接:https://www.luogu.com.cn/problem/P3190
题目大意
\(n*m\)的网格上有权值,求一条权值和最大的不交回路。
\(1\leq n\leq 100,1\leq m\leq 6\)
解题思路
经典的棋盘形插头\(dp\),和模板不同的地方是求最大权值和并且不用铺满整张图。
那么在没有插头的地方可以选择不新建插头就好了,需要注意判断边界\(j=m\)和\(i=n\)的情况。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int P=333331;
struct node{
int to,next;
}a[P<<1];
int n,m,v[110][10],bit[10];
int t[2],S[2][P],dp[2][P];
int ans,tot,o,ls[P];
void Add(int s,int v){
int x=s%P;
for(int i=ls[x];i;i=a[i].next)
if(S[o][a[i].to]==s)
{dp[o][a[i].to]=max(dp[o][a[i].to],v);return;}
t[o]++;S[o][t[o]]=s;dp[o][t[o]]=v;
a[++tot].to=t[o];a[tot].next=ls[x];ls[x]=tot;
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&v[i][j]);
for(int i=0;i<=m;i++)bit[i]=(1<<(i<<1));
t[o]=1;ans=-2147483647;
for(int i=1;i<=n;i++){
for(int j=1;j<=t[o];j++)S[o][j]<<=2;
for(int j=1;j<=m;j++){
o=!o;t[o]=tot=0;
memset(ls,0,sizeof(ls));
int s,w,dpl,rpl;
for(int k=1;k<=t[!o];k++){
s=S[!o][k];w=dp[!o][k];
dpl=(s>>(j<<1))%4;
rpl=(s>>(j-1<<1))%4;
if(!dpl&&!rpl){
Add(s,w);
if(i!=n&&j!=m)Add(s+bit[j-1]+2*bit[j],w+v[i][j]);
}
else if(!dpl&&rpl){
if(i!=n)Add(s,w+v[i][j]);
if(j!=m)Add(s-rpl*bit[j-1]+rpl*bit[j],w+v[i][j]);
}
else if(dpl&&!rpl){
if(i!=n)Add(s-dpl*bit[j]+dpl*bit[j-1],w+v[i][j]);
if(j!=m)Add(s,w+v[i][j]);
}
else if(dpl==1&&rpl==1){
int c=1;
for(int p=j+1;p<=m;p++){
if((s>>(p<<1))%4==1)c++;
if((s>>(p<<1))%4==2)c--;
if(!c){Add(s-bit[j]-bit[j-1]-bit[p],w+v[i][j]);break;}
}
}
else if(dpl==2&&rpl==2){
int c=1;
for(int p=j-2;p>=0;p--){
if((s>>(p<<1))%4==2)c++;
if((s>>(p<<1))%4==1)c--;
if(!c){Add(s-2*bit[j]-2*bit[j-1]+bit[p],w+v[i][j]);break;}
}
}
else if(dpl==1&&rpl==2)
Add(s-bit[j]-2*bit[j-1],w+v[i][j]);
else if(dpl==2&&rpl==1){
if(dpl*bit[j]+rpl*bit[j-1]==s)
ans=max(ans,w+v[i][j]);
}
}
}
}
printf("%d\n",ans);
return 0;
}
P3190-[HNOI2007]神奇游乐园【插头dp】的更多相关文章
- bzoj 1187: [HNOI2007]神奇游乐园 插头dp
1187: [HNOI2007]神奇游乐园 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 668 Solved: 337[Submit][Statu ...
- 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
[BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
- 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告
P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...
- 洛谷P3190 [HNOI2007]神奇游乐园(插头dp)
传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上 ...
- [HNOI2007][bzoj1187] 神奇游乐园 [插头dp]
题面: 传送门 给定一个四联通棋盘图,每个格子有权值,求一条总权值最大的回路 思路: 插头dp基础教程 棋盘? 回路? n,m<=10? 当然是插头dp啦~\(≧▽≦)/~ 然后发现这道题并不是 ...
- P3190 [HNOI2007]神奇游乐园
传送门 第一道插头 $dp$ 由于讲不清楚所以假装各位早就会插头 $dp$ 了 首先要的是一个闭合回路,所以可以用括号表示法表示状态,然后大力分类讨论 $1.$ 没有右插头和下插头 那么我们可以啥也不 ...
- [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 ...
- 1187: [HNOI2007]神奇游乐园 - BZOJ
Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...
随机推荐
- idea的properties文件乱码问题解决
设置编码格式: File============>Settings,打开设置后,设置成下面的即可解决:
- 【RPC】远程接口调用实例 的几种方式比较
pring中,用JMS搞RPC时会用到: org.springframework.jms.remoting.JmsInvokerServiceExporter org.springframework. ...
- mfc HackerTools远程线程注入
在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程).创建的线程一般为Windows API函 ...
- 虚拟机--第一章走进java--(抄书)
这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第一章走近java 世界上并没有 ...
- vue-bluJavascript - Vue - 插件(swiper、vue-preview)
swiper swiper是一个支持滑动效果的js插件,它也支持在vue中使用,主要用于移动端的触摸滑动操作.Swiper中文网. 安装和导入插件 npm i vue-awesome-swiper - ...
- 交互式查询⼯具Impala
Impala是什么: Impala是Cloudera提供的⼀款开源的针对HDFS和HBASE中的PB级别数据进⾏交互式实时查询(Impala 速度快),Impala是参照⾕歌的新三篇论⽂当中的Drem ...
- 分数化循环小数C++实现
引言 前一阵做了一个有理数四则混合运算的程序(详见:用C++实现的有理数(分数)四则混合运算计算器),以分数形式呈现运算结果.这次添加以循环小数形式呈现运算结果的功能.例如: Please input ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2
三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...
- SpringMVC笔记(2)
一.SpringMVC的数据响应 1.1 数据响应方式 1.1.1 页面跳转 直接返回字符串 将返回的字符串与内部资源视图解析器的前后缀拼接 进行访问(默认为转发) 通过ModelAndView对象返 ...
- SpringBoot整合定时任务----Scheduled注解实现(一个注解全解决)
一.使用场景 定时任务在开发中还是比较常见的,比如:定时发送邮件,定时发送信息,定时更新资源,定时更新数据等等... 二.准备工作 在Spring Boot程序中不需要引入其他Maven依赖 (因为s ...