\(\text{Solution}\)

当 \(h=1\) 时显然是斯坦纳树板子,最方案必然是树形的

\(h > 1\) 时,考虑在每一层新建一个状态表示上一层宝藏全部挖完到这层某个点的答案

同理转移

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#define RE register
#define IN inline
using namespace std; const int N = 11, INF = 0x3f3f3f3f;
int h, n, m, a[N][N][N], f[N][N][N][1027], vis[N][N];
int fx[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
struct point{int x, y;};
queue<point> Q;
struct treasure{int n, c[N][N];}b[N];
IN void Min(int &x, int y){x = min(x, y);} IN void spfa(int z, int s)
{
while (!Q.empty())
{
point now = Q.front(); Q.pop();
for(RE int k = 0; k < 4; k++)
{
int x = now.x + fx[k][0], y = now.y + fx[k][1];
if (x > 0 && x <= n && y > 0 && y <= m && f[z][x][y][s] > f[z][now.x][now.y][s] + a[z][x][y])
{
f[z][x][y][s] = f[z][now.x][now.y][s] + a[z][x][y];
if (!vis[x][y]) vis[x][y] = 1, Q.push(point{x, y});
}
}
vis[now.x][now.y] = 0;
}
}
IN void Stenir_Tree(int z)
{
for(RE int s = 1; s < (1 << b[z].n); s++)
{
memset(vis, 0, sizeof vis);
for(RE int i = 1; i <= n; i++)
for(RE int j = 1; j <= m; j++)
{
for(RE int t = (s - 1) & s; t; t = (t - 1) & s)
Min(f[z][i][j][s], f[z][i][j][t] + f[z][i][j][s ^ t] - a[z][i][j]);
if (f[z][i][j][s] != INF) vis[i][j] = 1, Q.push(point{i, j});
}
spfa(z, s);
}
} int main()
{
freopen("treasure.in", "r", stdin), freopen("treasure.out", "w", stdout);
scanf("%d%d%d", &h, &n, &m);
for(RE int i = 1; i <= h; i++)
for(RE int j = 1; j <= n; j++)
for(RE int k = 1; k <= m; k++) scanf("%d", &a[i][j][k]);
memset(f, INF, sizeof f), f[0][1][1][1] = 0, b[0].n = 1; int ans = INF;
for(RE int i = 1; i <= h; i++)
{
scanf("%d", &b[i].n), ++b[i].n;
for(RE int j = 2, x, y; j <= b[i].n; j++)
scanf("%d%d", &x, &y), b[i].c[x][y] = j, f[i][x][y][1 << j - 1] = a[i][x][y];
}
for(RE int i = 0; i <= h; i++)
{
Stenir_Tree(i);
if (i < h)
{
for(RE int j = 1; j <= n; j++)
for(RE int k = 1; k <= m; k++)
if (f[i][j][k][(1 << b[i].n) - 1] != INF)
Min(f[i + 1][j][k][1], f[i][j][k][(1 << b[i].n) - 1] + a[i + 1][j][k]);
}
else for(RE int j = 1; j <= n; j++)
for(RE int k = 1; k <= m; k++) Min(ans, f[h][j][k][(1 << b[h].n) - 1]);
}
printf("%d\n", ans);
}

JZOJ 3737. 【NOI2014模拟7.11】挖宝藏的更多相关文章

  1. 「JSOI2010」挖宝藏

    「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...

  2. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  3. JZOJ.5258【NOIP2017模拟8.11】友好数对

    Description

  4. JZOJ.5257【NOIP2017模拟8.11】小X的佛光

    Description

  5. [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告

    题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...

  6. JZOJ 4611. 【NOI2016模拟7.11】接水问题 (贪心+A*+可持久化线段树)

    Description: https://gmoj.net/senior/#main/show/4611 题解: 先把A从大到小排序,最小的由排序不等式显然. 考虑类似第k短路的A*的做法. 定义状态 ...

  7. [转载]如何在C++03中模拟C++11的右值引用std::move特性

    本文摘自: http://adamcavendish.is-programmer.com/posts/38190.htm 引言 众所周知,C++11 的新特性中有一个非常重要的特性,那就是 rvalu ...

  8. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  9. ZOJ 3780 - Paint the Grid Again - [模拟][第11届浙江省赛E题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Time Limit: 2 Seconds      Me ...

  10. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

随机推荐

  1. 一行代码实现shell if else逻辑

    前言 前几天学习 shell 脚本,发现这种好用的写法,简单记录一下. if else 一行实现 if [ 1=1 ] ;then echo "条件成立";else echo &q ...

  2. Linux 使用打印机

    前言 在 deepin 上打印机好使,在我的mint上不好使,简单的查看一下deepin上驱动及软件.安装上就行了. 软件及驱动 ii hpijs-ppds 3.18.12+dfsg0-2 all H ...

  3. mybatis中xml的sql之test中文报错

    在mybatis中sql,test中文报错( java.lang.NumberFormatException 这句话明确告诉了我们是数字格式异常).需加.tostring(). <if test ...

  4. 过debugger的几种方法+案例

    受益匪浅 https://mp.weixin.qq.com/s/559so0RheeiQdA670J23yghttps://blog.csdn.net/weixin_43834227/article/ ...

  5. MAUI新生4.6-主题设置LightTheme&DarkTheme

    通过主题设置,可以在运行时更改应用的主题外观,比如切换亮色主题和暗黑主题.主题设置并没有新的知识点,基本的原理如下: 定义每个应用主题的ResourceDictionary,每个ResourceDic ...

  6. Python从入门到精通(第2版)——pyuic5: error: no such option: -m的问题解决

    前言 在学习<Python从入门到精通(第2版)>的第15章 GUI界面编程--15.2.4 将.ui文件转换为.py文件时,按照书中步骤出错时的问题解决,希望对同样学习本书的同学有所帮助 ...

  7. github的初体验

    首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join有了自己的账号以后,就可以进行登录,开始创建一个新的项目创建一个新的项目,填写项目名称,描述创建完成之后 ...

  8. 已完成 10000 多次提交,Solon Java Framework v1.12.1 发布

    一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...

  9. 【集成开发环境 (IDE)】Dev-Cpp下载与安装 [ 图文教程 ]

    版权声明 本文作者:main工作室 本文链接:https://www.cnblogs.com/main-studio/p/17037280.html 版权声明:本文为 博客园 博主「main工作室」的 ...

  10. S2-012 CVE-2013-1965

    漏洞名称 S2-012(CVE-2013-1965) 远程代码执行 利用条件 Struts Showcase App 2.0.0 - Struts Showcase App 2.3.14.2 影响版本 ...