NOIP 2017 宝藏 - 动态规划
设$f_{d, s}$表示当前树的深度为$d$,与第一个打通的点连通的点集为$s$。
每次转移的时候不考虑实际的深度,深度都当做$d$,寻找连接两个点集最小边集,如果能连接更浅的点,那么会在之前转移,所以即使转移非法也不可能成为最优解。
找连接两个点集的最小边集合可以预处理。
我比较懒,不想预处理,时间复杂度$O(n^{2}3^{n})$。
Code
/**
* uoj
* Problem#333
* Accepted
* Time: 123ms
* Memory: 1412k
*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef bool boolean; const int N = , S = << N;
const signed inf = (signed) (~0u >> ); template <typename T>
void pfill(T* pst, const T* ped, T val) {
for ( ; pst != ped; *(pst++) = val);
} int n, m;
int g[N][N];
int f[N + ][S];
int cost[S]; inline void init() {
scanf("%d%d", &n, &m);
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
g[i][j] = inf;
for (int i = , u, v, w; i < m; i++) {
scanf("%d%d%d", &u, &v, &w), u--, v--;
g[v][u] = g[u][v] = min(g[u][v], w);
}
} int id[S];
inline void solve() {
int S = ( << n);
pfill(f[], f[n + ], inf);
pfill(cost, cost + S, inf);
for (int i = ; i < n; i++)
id[ << i] = i;
for (int i = ; i < n; i++)
f[][ << i] = ;
int ans = f[][S - ];
for (int d = ; d <= n; d++) {
for (int s = , val; s < S; s++) {
if ((val = f[d - ][s]) == inf)
continue;
cost[] = ;
for (int ns = (s + ) | s, cs, w, wc, cur; ns < S; ns = (ns + ) | s) {
cs = (ns ^ s), w = cost[cs ^ (cs & (-cs))], wc = inf;
if (w == inf)
continue;
cur = id[(cs & (-cs))];
for (int i = ; i < n; i++)
if (s & ( << i))
wc = min(wc, g[cur][i]);
if (wc == inf)
continue;
f[d][ns] = min(f[d][ns], val + (w + wc) * (d - ));
cost[cs] = w + wc;
} for (int ns = s; ns < S; ns = (ns + ) | s)
cost[ns ^ s] = inf;
}
ans = min(ans, f[d][S - ]);
}
printf("%d\n", ans);
} int main() {
init();
solve();
return ;
}
NOIP 2017 宝藏 - 动态规划的更多相关文章
- [NOIp 2017]宝藏
Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...
- 水题挑战3: NOIP 2017 宝藏
参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...
- 历年真题 未完成(Noip 2008 - Noip 2017)
Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...
- Luogu 1060 开心的金明 / NOIP 2006 (动态规划)
Luogu 1060 开心的金明 / NOIP 2006 (动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨 ...
- NOIP 2017 解题报告
---恢复内容开始--- NOIP 2017 的题真的很难啊,怪不得当年我这个萌新爆零了(当然现在也是萌新)越学越觉得自己什么都不会. 想要成为强者要把这些好题都弄懂弄透 至少现在6道题我都比较陌生 ...
- NOIP 2017 列队 - Splay - 树状数组
题目传送门 传送点I 传送点II 题目大意 (家喻户晓的题目应该不需要大意) (我之前咋把NOIP 2017打成了NOIP 2018,好绝望) Solution 1 Splay 每行一颗Splay,没 ...
- 【游记】NOIP 2017
时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
随机推荐
- laravel的日志权限
命令行脚本运行时报错 UnexpectedValueException : The stream or file "/Data/PMS/storage/logs/laravel-2019- ...
- day23:类的命名空间和组合
1,类属性:静态属性,方法:动态属性:双下init方法,每当我们调用类的时候就会自动的触发这个方法,默认传self,在init方法里面可以对self赋值:在类的内部,self就是一个对象,我们自己实例 ...
- $_SERVER服务器端
url = 'http://www.5idev.com/php/index.php/test/foo?username=hbolive' php 获取$_SERVER信息 $_SERVER['PHP_ ...
- RuntimeError: implement_array_function method already has a docstring
根源:Numpy/Scipy/Pandas/Matplotlib/Scikit-learn 出现冲突 解决办法: pip uninstall scikit-learn pip uninstall ma ...
- 使用pushstate,指定回退地址
history.pushState(null,"testname", window.location.href); window.addEventListener('popstat ...
- Ztree节点增加删除修改和Icheck的用法
简介 官方文档:http://www.treejs.cn/v3/api.php zTree 是一个依靠 jQuery 实现的多功能 “树插件”, 而且拥有较好的浏览器兼容性,有着丰富的功能以及可以自定 ...
- STM32_DAC之软件触发(Trigger)
stm32_DAC可以用来输出固定的电压值,有些时候需要按键可调输出的电压值.其中一种方法是使用外部中断EXTI9, 另外一种方法就是使用软件触发. 如果将DAC_InitTypeDef.DAC_Tr ...
- RSA公私钥获取模数和质数
实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数.openssl.java api都可以将质数 ...
- 使用Apache JMeter对SQL Server、Mysql、Oracle压力测试(一)
前段时间面试被问到了数据库方面的知识:比如选择什么样的数据库,如何优化,怎么加索引,于是想到了自己动手测试一下常用数据库的性能: 第一步,下载好JMeter之后打开运行.话说这个JMeter打开还真是 ...
- Spring AOP capabilities and goals
Spring AOP 是用纯JAVA 实现的. 不需借助JAVA代码在编译处理阶段来实现. Spring 是在运行期实现的.AOP的实现可以在编译,加载,运行三个阶段来实现:Spring AOP 也不 ...