题解

真的想不到这题状压的做法。。。听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ。

不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ 联通的最小代价, 也就是从 $i$ 到 $ j, j \in S$的最小距离。

接着处理$ss_{S, T}$, $S\subset T$, 表示从集合$S$拓展到$T$所需要的最小代价。

最后求出$f_{i, j}$ 表示当前已到 深度$i$, 已经扩展到集合$S$时耗费的最小代价. 答案就是$ \min(f_{i, U })$ $ i \in [0, n - 1]$

是可以求出所有的挖掘方案中的最小代价, 是个正确算法(吧,应该

代码

 #include<cstring>
#include<algorithm>
#include<cstdio>
#define rd read()
#define rep(i,a,b) for( int i = (a); i <= (b); ++i )
#define per(i,a,b) for( int i = (a); i >= (b); --i )
using namespace std; const int N = ;
const int M = << ;
const int inf = ; int pt[N][M], ss[M][M], f[N][M], mp[N][N], n, m; inline int read() {
int X = , p = ; char c = getchar();
for(; c > '' || c < ''; c = getchar() ) if( c == '-' ) p = -;
for(; c >= '' && c <= ''; c = getchar() ) X = X * + c - '';
return X * p;
} inline void cmin( int &a, int b ) {
if( a > b ) a = b;
} int main()
{
n = rd; m = rd;
memset(pt, , sizeof(pt));
memset(f, , sizeof(f));
memset(mp, , sizeof(mp));
rep( i, , m ) {
int u = rd - , v = rd - , w = rd;//我从0开始存点
cmin( mp[u][v], w );
cmin( mp[v][u], w );
}
//求出点连到集合的最小代价
rep( S, , ( << n) - )
rep( i, , n - ) if((S >> i) & )
rep( j, , n - ) if(!((S >> j) & ))
cmin( pt[j][S], mp[j][i] );
//求出集合扩展的最小代价
rep( S, , ( << n) - )
for( int j = S & (S - ); j; j = S & (j - ) ) {//j为S 的子集,神奇的枚举子集方法
int left = S ^ j;
rep( i, , n - ) if((left >> i) & )
ss[j][S] = min( ss[j][S] + pt[i][j], inf );
} rep( i, , n - ) f[][ << i] = ;
rep( i, , n - )
rep( S, , ( << n) - )
for( int j = S & (S - ); j; j = S & (j - ) ) {
int tmp;
if( ss[j][S] != inf ) tmp = ss[j][S] * i;//集合能够扩展
else tmp = inf;
if( f[i - ][j] != inf ) cmin( f[i][S], f[i - ][j] + tmp );//上一步的状态可行
}
int ans = inf;
rep( i, , n - ) cmin( ans, f[i][ ( << n) - ] );//求出最小值
printf("%d\n", ans);
}

Luogu 3959 [NOIP2017] 宝藏- 状压dp的更多相关文章

  1. [NOIP2017]宝藏 状压DP

    [NOIP2017]宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖 ...

  2. 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$

    正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...

  3. Luogu3959 NOIP2017 宝藏 状压DP

    题目传送门:https://www.luogu.org/problemnew/show/P3959 题意:给出一个有$N$个点的图,求其中的一个生成树(指定一个点为根),使得$\sum\limits_ ...

  4. $[NOIp2017]$ 宝藏 状压$dp$

    \(Sol\) 觉得这里是个很巧妙的地方吖,就是记下当前扩展点集的最大深度,然后强制下一步扩展的点集都是最大深度+1.这样做在当前看可能会导致误算答案导致答案偏大,但是整个\(dp\)完成后一定可以得 ...

  5. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

  6. Luogu 3959 [NOIP2017] 宝藏

    NOIP2017最后一道题 挺难想的状压dp. 受到深度的条件限制,所以一般的状态设计带有后效性,这时候考虑把深度作为一维,这样子可以保证所有状态不重复计算一遍. 神仙预处理:先处理出一个点连到一个集 ...

  7. P3959 宝藏 状压dp

    之前写了一份此题关于模拟退火的方法,现在来补充一下状压dp的方法. 其实直接在dfs中状压比较好想,而且实现也很简单,但是网上有人说这种方法是错的...并不知道哪错了,但是就不写了,找了一个正解. 正 ...

  8. NOIp2017D2T2(luogu3959) 宝藏 (状压dp)

    时隔多年终于把这道题锅过了 数据范围显然用搜索剪枝状压dp. 可以记还有哪些点没到(或者已到了哪些点).我们最深已到的是哪些点.这些点的深度是多少,然后一层一层地往下推. 但其实是没必要记最深的那一层 ...

  9. 计蒜客 宝藏 (状压DP)

    链接 : Here! 思路 : 状压DP. 开始想直接爆搜, T掉了, 然后就采用了状压DP的方法来做. 定义$f[S]$为集合$S$的最小代价, $dis[i]$则记录第$i$个点的"深度 ...

随机推荐

  1. NHibernate 学习笔记(一)

    NHibernate 的简介: NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping (ORM))这个术语表示 ...

  2. uva-10194-排序

    题意: 如果一个队伍的得分比对方高,那么就赢得这场游戏,很明显,如果得分低那就是输了,如果俩个队伍的得分一样,那么就是平局,赢得比较获得3个点的得分,平手1个点的得分,输了0分.排序规则如下1:得分点 ...

  3. leetcode944

    public class Solution { public int MinDeletionSize(string[] A) { ; ; j < A[].Length; j++) { ; i & ...

  4. PHP 程序员学数据结构与算法之《栈》

    “要成高手,必练此功”.   要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈 ...

  5. NavitForMySql 破解工具使用

    Navicat 11.0注册机使用教程: 1.右键-管理员权限运行注册机2.选择对应的产品3.点击“补丁”按钮,选择文件4.点击“生成”按钮,生成序列号,并保存下授权文件5.复制序列号,打开软件,在弹 ...

  6. CSS3d 基础

    -webkit-transform-style:-webkit-preserve-3d;//设置3D转换 translateX:px; 平移 translateY:px; translateZ:px; ...

  7. Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验

    1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...

  8. Annoying “Remote System Explorer Operation” causing freeze for couple of seconds

    Eclipse -> Preferences -> General -> Startup and Shutdown. -Uncheck RSE UI. Eclipse -> P ...

  9. libcurl 不支持https访问

    项目中使用libcurl 访问https的时候会报错,比如:“Unsupported protocol” 或者:“Protocol https not supported or disabled in ...

  10. 在eclipse的web项目里面创建jsp时第一行报错

    原因是因为项目里面没有配置tomcat,配置一下tomcat就好了