[HNOI2007]神奇游乐园(插头DP)
2024-10-12 12:44:33
题意: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);
}
最新文章
- AngularJS过滤器filter-保留小数,小数点-$filter
- SQL Server数据库转换成oracle
- 一个很奇怪的重复链接lib的问题
- javascript在调试bug的奇淫技巧(Chrome, Firebug, Filddle 调试)
- Castle IOC容器内幕故事(下)
- <;摘录>;详谈高性能UDP服务器的开发
- 本人第一个android游戏《新连连看》上架
- DataUml Design 课程6-DataUML Design 1.1版本号正式宣布(支持PD数据模型)
- HDU------checksum
- opnet点对点通信模型 分类: opnet 2014-05-26 22:15 246人阅读 评论(3) 收藏
- Oracle12c中性能优化&;amp;功能增强新特性之临时undo
- HTML5 CSS3专题 纯CSS打造相册效果
- LVM备份(2)-创建LVM逻辑卷
- vue页面传参和接参
- css中px,em,rem,rpx的区别
- re、词云
- Windows 2008 R2防火墙设置运行被ping通
- Eclipse报This version of the rendering library is more recent than your version of ADT ...
- python接口测试中安装whl格式的requests第三方模块
- gcc5.2版本安装详解
热门文章
- vue+element-ui实现行数可控的表格输入
- HTML5 新增的 input 事件
- 解决Angular2 (SystemJS) XHR error (404 Not Found) loading traceur
- 从0开始的Python学习017Python标准库
- 野指针与&#39;关键字&#39;NULL
- Linux新手随手笔记1.2
- 如何在本地编译Fabric Code
- QPushButton class
- elementUi、iview、ant Design源码button结构篇
- 随心测试_软测基础_004<;测试人员工作职责>;