[JLOI2009]神秘的生物

只需要维护连通情况,采用最小表示法,表示此格是否存在,也即插头是否存在

分情况讨论当前格子的轮廓线上方格子和左方格子状态,转移考虑当前格子选不选,决策后状态最后要能合法

\(\text{Code}\)

$\text{Code}$
#include <bits/stdc++.h>
#define IN inline
using namespace std; const int N = 15;
int bit[N], a[N][N], ans = -2e9, n; struct Hash_Table {
#define mod 590027
struct edge{int nxt, sta, f;}e[1 << 24];
int h[mod + 5], tot;
IN void clear(){tot = 0, memset(h, 0, sizeof h);}
IN void insert(int s, int v) {
int id = s % mod;
for(int i = h[id], x; i; i = e[i].nxt)
if (e[i].sta == s) return e[i].f = max(e[i].f, v), void();
e[++tot] = edge{h[id], s, v}, h[id] = tot;
}
}hs[2]; IN int Recode(int s, int v) {
int vis[8] = {}, cnt = 0, t = 0;
for(int i = 0, x; i < n; i++) {
if (!(x = (s >> 3*i) & 7)) continue;
if (!vis[x]) vis[x] = ++cnt;
t += vis[x] * bit[i];
}
if (cnt == 1) ans = max(ans, v);
return t;
}
IN int Count(int s, int v) {
int res = 0;
for(int i = 0; i < n; i++) if (((s >> 3*i) & 7) == v) ++res;
return res;
} void solve() {
int cur = 0; hs[cur].insert(0, 0);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) {
hs[cur^1].clear();
for(int k = 1; k <= hs[cur].tot; k++) {
int curS = hs[cur].e[k].sta, curF = hs[cur].e[k].f;
int bd = (curS >> 3*(j - 1)) & 7, br = 0;
if (j > 1) br = (curS >> 3*(j - 2)) & 7;
if (!bd && !br) {
hs[cur^1].insert(Recode(curS, curF), curF);
hs[cur^1].insert(Recode(curS + 7*bit[j-1], curF + a[i][j]), curF + a[i][j]);
}
else if (!bd && br) {
hs[cur^1].insert(Recode(curS, curF), curF);
hs[cur^1].insert(Recode(curS + br*bit[j-1], curF + a[i][j]), curF + a[i][j]);
}
else if (bd && !br) {
hs[cur^1].insert(Recode(curS, curF + a[i][j]), curF + a[i][j]);
if (Count(curS, bd) >= 2) hs[cur^1].insert(Recode(curS - bd*bit[j-1], curF), curF);
}
else {
if (Count(curS, bd) >= 2) hs[cur^1].insert(Recode(curS - bd*bit[j-1], curF), curF);
if (br != bd) for(int w = 0; w < n; w++) if (((curS >> 3*w) & 7) == bd) curS += bit[w] * (br - bd);
hs[cur^1].insert(Recode(curS, curF + a[i][j]), curF + a[i][j]);
}
}
cur ^= 1;
}
} int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) scanf("%d", &a[i][j]), ans = max(ans, a[i][j]);
bit[0] = 1;
for(int i = 1; i <= n; i++) bit[i] = bit[i - 1] << 3;
solve(), printf("%d\n", ans);
}

插头dp 模板的更多相关文章

  1. 插头DP模板

    /* 插头dp模板 抄的GNAQ 的 括号表示法 */ #include<cstdio> #include<algorithm> #include<cstring> ...

  2. bzoj1814 Ural 1519 Formula 1(插头dp模板题)

    1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 351[Submit][Sta ...

  3. hdu1964之插头DP求最优值

    Pipes Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. 【HDU】1693:Eat the Trees【插头DP】

    Eat the Trees Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. 插头dp练习

    最近学了插头dp,准备陆续更新插头dp类练习. 学习论文还是cdq那篇<基于连通性状态压缩的动态规划问题>. 基本的想法都讲得很通透了,接下来就靠自己yy了. 还有感谢kuangbin大大 ...

  6. 学习笔记:插头DP

    基于连通性的状压DP问题. 一般是给你一个网格,有一些连通性的限制. 例题 插头DP模板 链接 题意:网格图,去掉一些点,求哈密顿回路方案数. 一般按格递推(从上到下,从左到右). 每个格子要从四个方 ...

  7. 模板:插头dp

    前言: 严格来讲有关dp的都不应该叫做模板,因为dp太活了,但是一是为了整理插头dp的知识,二是插头dp有良好的套路性,所以姑且还叫做模板吧. 这里先推荐一波CDQ的论文和这篇博客http://www ...

  8. LG5056 【模板】插头dp

    题意 题目背景 ural 1519 陈丹琦<基于连通性状态压缩的动态规划问题>中的例题 题目描述 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 输 ...

  9. P5056 【模板】插头dp

    \(\color{#0066ff}{ 题目描述 }\) 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? \(\color{#0066ff}{输入格式}\) 第1 ...

  10. 【模板】插头dp

    题目描述 题解: 插头$dp$中经典的回路问题. 首先了解一下插头. 一个格子,上下左右四条边对应四个插头.就像这样: 四个插头. 一个完整的哈密顿回路,经过的格子一定用且仅用了两个插头. 所以所有被 ...

随机推荐

  1. 关于mysql数据库user表没有password字段

    解决 这个是因为mysql的版本问题,是mysql 5.7版本出现的,具体是mysql 5.7.x 开始变化的我不知道 新的字段变更为authentication_string 修改密码的方式还是和原 ...

  2. EASE-Grid经纬度与行列号转换公式 以 25KM的HDF数据为例

    /// <summary> /// 把经纬度转换成行列号 /// </summary> /// <param name="pLng"></ ...

  3. day 26 form表单标签 & CSS样式表-选择器 & 样式:背景、字体、定位等

    html常用标签 嵌套页面 <!-- 嵌套页面 --> <div> <!-- target属性值可以通过指定的iframe的name属性值, 实现超链接页面,在嵌套页面展 ...

  4. 【重难点总结】DMA与kafka零拷贝机制之间的关系

    一.DMA介绍 1.概念 DMA(Direct Memory Access,直接存储器访问) 是一种内存访问技术,独立于CPU, 直接读.写系统存储器.外设等 主存与I/0设备之间使用DMA控制器控制 ...

  5. 【笔面试真题】ThoughtWorks-笔试-2022年1月21日

    一.选择填空判断 2n-1 二.算法题 算法题1:配对括号 算法题2:计算有效票数? 算法题3:求字符串中指定单词的数量 package com.jhliu20.real; import java.u ...

  6. GitHub 开源了多款字体「GitHub 热点速览 v.22.48」

    本期 News 快读有 GitHub 官方大动作一下子开源了两款字体,同样大动作的还有 OpenAI 发布的对话模型 ChatGPT,引燃了一波人机对话. 项目这块,也许会成为新的 Web 开发生产力 ...

  7. docker 第一课

    centos安装docker yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ...

  8. Jmeter 之 jp@gc - Stepping Thread Group

    jp@gc - Stepping Thread Group 自定义线程组,根据业务需要进行设计用户增加间隔时间等 1.  下载jmeter-plugins-manager-1.3.jar插件放入lib ...

  9. 随身WIFI刷机记录 UF1003

    设备说明 拿到手的设备是UF1003的设备,入手价格23元. https://www.bilibili.com/video/BV1Ne4y1n7su/ 视频会同步到BIlibili,感谢大家的支持,点 ...

  10. Android录屏实现

    使用方案: mediacodec + mediaprojection + mediamuxer MediaProjectionManager主要作用是获得录屏权限 startActivityForRe ...