Luogu P3959 [NOIP2017]宝藏
题目
STO rqy OTZ
首先这种题一看我们就知道可以爆搜。
prim一眼假了,但是加个SA也能过。
所以我们来写状压。
记\(f_{i,j,S}\)表示起点到\(j\)距离为\(i\),我们现在从\(j\)开始挖通\(S\)的最小代价。
转移是显然的:枚举\(S\)的子集\(T\)和\(T\)中的点\(k\),挖通\((k,j)\)这条边(如果存在)。
\(f_{i,j,S}=\min\limits_{k\in T\subseteq S}(f_{i,j,S\setminus T}+f_{k,j+1,T\setminus\{k\}}+(i+1)E_{j,k})\)。
#include<bits/stdc++.h>
using namespace std;
const int N=12,inf=0x3f3f3f3f;
int read(){int x;cin>>x;return x;}
int min(int a,int b){return a<b? a:b;}
int low[1<<N],cnt[1<<N],f[N][N][1<<N],E[N][N];
int main()
{
int n=read(),m=read(),i,j,k,u,v,w,t,S,T,U,ans;
memset(E,0x3f,sizeof E),memset(f,0x3f,sizeof f),U=(1<<n)-1;
for(i=1;i<=m;++i) u=read()-1,v=read()-1,w=read(),E[u][v]=E[v][u]=min(E[u][v],w);
for(i=1;i<=U;++i) cnt[i]=cnt[i&i-1]+1;
for(i=0;i<=n;++i) low[1<<i]=i;
for(i=1;i<=U;++i) low[i]=low[i&-i];
for(i=0;i<n;++i) f[n-1][i][0]=0;
for(i=n-2;~i;--i)
for(j=0;j<n;++j)
for(f[i][j][0]=0,S=1;S<=U;++S)
if(~S&1<<j&&cnt[S]<=n-i-1)
for(T=S;T;T=T-1&S)
if(f[i][j][S&~T]<f[i][j][S])
for(k=low[t=T];t;k=low[t=t^1<<k])
if(E[j][k]^inf)
f[i][j][S]=min(f[i][j][S],f[i+1][k][T^1<<k]+f[i][j][S^T]+(i+1)*E[j][k]);
for(ans=inf,i=0;i<n;++i) ans=min(ans,f[0][i][U^1<<i]);
return !printf("%d",ans);
}
Luogu P3959 [NOIP2017]宝藏的更多相关文章
- 洛谷 P3959 NOIP2017 宝藏 —— 状压搜索
题目:https://www.luogu.org/problemnew/show/P3959 搜索: 不是记忆化,而是剪枝: 邻接矩阵存边即可,因为显然没有那么多边. 代码如下: #include&l ...
- Luogu 3959 [NOIP2017] 宝藏
NOIP2017最后一道题 挺难想的状压dp. 受到深度的条件限制,所以一般的状态设计带有后效性,这时候考虑把深度作为一维,这样子可以保证所有状态不重复计算一遍. 神仙预处理:先处理出一个点连到一个集 ...
- 洛谷P3959 [NOIP2017]宝藏
[题目描述] 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋,也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但 ...
- Luogu 3959 [NOIP2017] 宝藏- 状压dp
题解 真的想不到这题状压的做法...听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ. 不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ ...
- 题解 Luogu P3959 【宝藏】
来一篇不那么慢的状压??? 话说这题根本没有紫题难度吧,数据还那么水 我是不会告诉你我被hack了 一看数据规模,n≤12,果断状压. 然后起点要枚举,就设dp状态: f[i][j]=以i为起点到j状 ...
- 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$
正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...
- [luogu]P3959 宝藏[NOIP][状态压缩DP]
[luogu]P3959 宝藏[TREASURE] 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的 ...
- [Luogu P3959] 宝藏 (状压DP+枚举子集)
题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...
- [luogu P3953] [noip2017 d1t3] 逛公园
[luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...
随机推荐
- 清除eclipse 里面主函数的加载记录 launch configuration删除
我们eclipse 里面执行的程序,应用 把他记录下来,生成配置文件. 当我们导出行的jar包的时候,需要制定运行的主函数. 会看到很多的历史主程序,带来方便的同时,也产生了影响. 需要清除写记录的 ...
- java web文件上传功能实现
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- cogs2039树的统计 x
2039. 树的统计 ★★ 输入文件:counttree.in 输出文件:counttree.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 关于树的统计问题 ...
- 我不熟悉的vector
构造函数 使用迭代器构造vector的一种方式: //将v[begin(), end())区间中的元素拷贝给本身 vector(v.begin(),v.end()); 在这个构造函数中,传入普通数组也 ...
- Pollard-rho算法[因子分解算法]
试除法:最简单的因数分解算法,从$ 2 $到$ \sqrt n $一个一个试. 试除法(改进):从$ 2 $到$ \sqrt n $挑素数一个一个试. 然而这样复杂度是相当高的. 生日悖论:指如果一个 ...
- RESTful API Design
https://restful-api-design.readthedocs.org/en/latest/scope.html http://blog.mashape.com/30-ways-to-m ...
- nginx 与location语法详解
Location语法优先级排列 匹配符 匹配规则 优先级 = 精确匹配 1 ^~ 以某个字符串开头 2 ~ 区分大小写的正则匹配 3 ~* 不区分大小写的正则匹配 4 !~ 区分大小写不匹配的正则 ...
- ZooKeeper java例子解读
转载链接:https://blog.csdn.net/liyiming2017/article/details/83276706 需求理解我们先回顾一下例子的需求,此客户端有如下四个需求: 1.它接收 ...
- JMH基准测试框架
jmh-gradle-plugin, 集成JMH基准测试框架和 Gradle 0 赞 0 评论 文章标签:Gradle JMH 基准 INT benchmark framework 帧 ...
- [HTML辅助方法-Html.Raw()的简单应用]
Html.Raw(); 当我们使用 文本编辑器,存入到数据库中的数据会带 html 标签,如果我们需要在前台显示存入时的相同样式,不输出为带有html标签的字符串 ,不通过富文本显示的话,可以通过ht ...