[HNOI2007]神奇游乐园(插头DP)
题意:n*m的矩阵内值有正有负,找一个四连通的简单环(长度>=4),使得环上值的和最大。
题解:看到2<=m<=6和简单环,很容易想到插头DP,设f[i][j][k]表示轮廓线为第i行第j列,插头状态为k的最大满意度。然后又成了一道插头DP的板子题。注意左插头为左括号,上插头为右括号,其余位置无插头,因为题目不要求走遍所有格子,且只能走一条回路。
#include<bits/stdc++.h>
using namespace std;
const int N=,mod=;
int n,m,ans,p,bin[],w[][],a[][N],f[][N],tot[N],hd[N],nxt[N];
void add(int S,int v)
{
int u=S%mod;
for(int i=hd[u];i;i=nxt[i])if(a[p][i]==S){f[p][i]=max(f[p][i],v);return;}
a[p][++tot[p]]=S,nxt[tot[p]]=hd[u],hd[u]=tot[p],f[p][tot[p]]=v;
}
int main()
{
scanf("%d%d",&n,&m);
ans=-1e9;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&w[i][j]);
bin[]=;for(int i=;i<=;i++)bin[i]=bin[i-]<<;
tot[p]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=tot[p];j++)a[p][j]<<=;
for(int j=;j<=m;j++)
{
p^=;
memset(hd,,sizeof hd);
tot[p]=;
for(int k=;k<=tot[p^];k++)
{
int S=a[p^][k],b1=(S>>j*-)%,b2=(S>>j*)%,val=f[p^][k];
if(!b1&&!b2)
{
if(i<n&&j<m)add(S+bin[j-]+*bin[j],val+w[i][j]);
add(S,val);
}
else if(!b1&&b2)
{
if(j<m)add(S,val+w[i][j]);
if(i<n)add(S-b2*bin[j]+b2*bin[j-],val+w[i][j]);
}
else if(b1&&!b2)
{
if(j<m)add(S-b1*bin[j-]+b1*bin[j],val+w[i][j]);
if(i<n)add(S,val+w[i][j]);
}
else if(b1==&&b2==)
{
int k1=;
for(int t=j+;t<=m;++t)
{
if((S>>t*)%==)k1++;
if((S>>t*)%==)k1--;
if(!k1){add(S-bin[j-]-bin[j]-bin[t],val+w[i][j]);break;}
}
}
else if(b1==&&b2==)
{
int k1=;
for(int t=j-;t>=;--t)
{
if((S>>t*)%==)k1--;
if((S>>t*)%==)k1++;
if(!k1){add(S-*bin[j-]-*bin[j]+bin[t],val+w[i][j]);break;}
}
}
else if(b1==&&b2==)add(S-*bin[j-]-bin[j],val+w[i][j]);
else if(S-bin[j-]-*bin[j]==)ans=max(ans,val+w[i][j]);
}
}
}
printf("%d",ans);
}
[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发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
- [HNOI2007][bzoj1187] 神奇游乐园 [插头dp]
题面: 传送门 给定一个四联通棋盘图,每个格子有权值,求一条总权值最大的回路 思路: 插头dp基础教程 棋盘? 回路? n,m<=10? 当然是插头dp啦~\(≧▽≦)/~ 然后发现这道题并不是 ...
- [bzoj1187][HNOI2007]神奇游乐园_插头dp
bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...
- 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告
P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...
- BZOJ1187 [HNOI2007]神奇游乐园(插头dp)
麻麻我会写插头dp了! 推荐陈丹琦论文:https://wenku.baidu.com/view/3e90d32b453610661ed9f4bd.html 破题调一年 #include <cs ...
- 洛谷P3190 [HNOI2007]神奇游乐园(插头dp)
传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上 ...
- 1187: [HNOI2007]神奇游乐园 - BZOJ
Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...
- bzoj:1187: [HNOI2007]神奇游乐园
Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...
随机推荐
- 剑指前端(前端入门笔记)——Date类型
Date类型 ECMAScript中的Date类型是在早期Java中的java.util.Date类基础上构建的.为此,Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)开始经过的 ...
- Dynamics 365-关于BPF的进一步探究
关于BPF是什么,以及如何在CRM中配置BPF,可以参阅熊宸大神的博客Dynamics 365 Business Process Flow -- 让你不再惧怕复杂的业务流程! 1. CRM中发生了什么 ...
- 给萌新的Flexbox简易入门教程
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://www.sitepoint.com/flexbox-css-flexible-bo ...
- Fragment生命周期以及使用时的小问题
前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...
- java连接sql server数据库(使用用户sa)
一.安装数据库相关软件 sql server management studio是管理sql server数据库的软件,想要使用需到微软官网下载安装sql server,然后再安装sql server ...
- SQL Server系统表sysobjects介绍
SQL Server系统表sysobjects介绍 sysobjects 表结构: 列名 数据类型 描述 name sysname 对象名,常用列 id int 对象标识号 xtype char(2) ...
- Jquery消息提示插件toastr使用详解
toastr是一个基于jQuery简单.漂亮的消息提示插件,使用简单.方便,可以根据设置的超时时间自动消失. 1.使用很简单,首选引入toastr的js.css文件 html <script s ...
- subgradients
目录 定义 上镜图解释 次梯度的存在性 性质 极值 非负数乘 \(\alpha f(x)\) 和,积分,期望 仿射变换 仿梯度 混合函数 应用 Pointwise maximum 上确界 suprem ...
- 利用node.js来实现长连接/聊天(通讯实例)
首先: 需要在服务器端安装node.js,然后安装express,socket.io这两个模块,并配置好相关的环境变量等. 其次: 服务端代码如下: var app = require('expres ...
- JAVA之列表
增: import java.util.ArrayList; import java.util.List; public class T{ public static void main(Stri ...