JZOJ 3737. 【NOI2014模拟7.11】挖宝藏
\(\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】挖宝藏的更多相关文章
- 「JSOI2010」挖宝藏
「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...
- JZOJ【NOIP2013模拟联考14】隐藏指令
JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...
- JZOJ.5258【NOIP2017模拟8.11】友好数对
Description
- JZOJ.5257【NOIP2017模拟8.11】小X的佛光
Description
- [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告
题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...
- JZOJ 4611. 【NOI2016模拟7.11】接水问题 (贪心+A*+可持久化线段树)
Description: https://gmoj.net/senior/#main/show/4611 题解: 先把A从大到小排序,最小的由排序不等式显然. 考虑类似第k短路的A*的做法. 定义状态 ...
- [转载]如何在C++03中模拟C++11的右值引用std::move特性
本文摘自: http://adamcavendish.is-programmer.com/posts/38190.htm 引言 众所周知,C++11 的新特性中有一个非常重要的特性,那就是 rvalu ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- ZOJ 3780 - Paint the Grid Again - [模拟][第11届浙江省赛E题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Time Limit: 2 Seconds Me ...
- [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)
interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...
随机推荐
- Day26:内部类的详解
内部类 1.1内部类概述 内部类:就是在一个类中定义另外一个类. 例如我们在A类中定义一个B类,那么B类就是A类的内部类,A则是B的外部类. 好比我们的手机是一个类,而手机内部的零件又属于一个类. 内 ...
- Excel2010工作簿被锁定,无法复制或者新增加sheet表格。
Sub 工作簿密码破解() ActiveWorkbook.Sheets.Copy For Each sh In ActiveWorkbook.Sheets sh.Visible = True Next ...
- Spring Boot回顾
一.概述 1.Spring的优缺点 优点 无需开发ELB,通过IOC和AOP,就可以使用POJO(简单的Java对象)实现ELB的功能 缺点: 依赖管理导入Maven耗时耗力 注解繁琐 2.Sprin ...
- openpyxl写数据
import osimport openpyxlos.chdir(r'D:/openpyxl') wb = openpyxl.Workbook() sht = wb.create_sheet('dat ...
- RocketMQ 在网易云音乐的实践
本文作者:蒋星韬,网易云音乐服务端开发工程师. 云音乐线上场景众多,比如直播.评论.广告,各个业务线都会有消息场景比如发奖券,也会有延迟消息和事务消息场景,以及大数据做埋点数据.数据清洗.离线处理等. ...
- war包形式安装jenkins
(1)下载war包 输入命令:java -jar jenkins.war --httpPort=8080,更改端口 重新登录之后,输入密码创建用户等完成设置 (2)结合Tomcat安装: 将jenki ...
- Django ValueError: HTTP status code must be an integer from 100 to 599.
程序执行后一直提示ValueError: HTTP status code must be an integer from 100 to 599. 遍历代码一切正常,然后开始调试代码,找出获取数据有问 ...
- Js生成图片验证码
上代码 /** * [使用说明] * 1.生成验证码 * 函数: * generateRandomCode( dom对象Id ); * 例: * generateRandomCode( 'id' ); ...
- ArcGIS插件-太乐地图
在很多行业,打败你的往往不是竞争对手,而是你意想不到的其他因素.回想十年前,如果能预料到现在的处境,也许当时的心态和做法会有所不同.在多年前,市场上出现包括水经注.太乐.BigeMap.91卫图等多种 ...
- 可持久化栈学习笔记 | 题解 P6182 [USACO10OPEN]Time Travel S
简要题意 你需要维护一个栈,有 \(n\) 个操作,支持: 给定一个 \(x\),将 \(x\) 加入栈. 将一个元素出栈. 给定一个 \(x\),将当前栈回退到 第 \(x\) 操作前. 每一次操作 ...