这道题考试的时候就骗了部分分。其实一眼看过去,n范围12,就知道是状压,但是不知道怎么状压,想了5分钟想不出来就枪毙了状压,与AC再见了。

现在写的是状压搜索,其实算是哈希搜索,感觉状压DP理解不了啊。思路来自于Gt,几乎照搬地写了自己的代码。

思路很简单,搜索。搜索里加了个启发,有点,不,是很像最优性剪枝。

dfs里,hsh是每个点的深度哈希起来(初始化要对于每一个点定一个专门的哈希值,用这个值来哈希自己的深度),k是已经连上了多少个点,val是代价。

估价函数里,对于每一个没有加入答案集合的点,找到他连上任意一个集合(可以是答案集合,也可以是以任意一个同样未连上答案集合的点为根的集合,这样的话当前点的深度就为2了)的最小代价。所有代价加起来后就是把剩下所有点加入答案集合的最低要求(不一定是这个值,但一定大于等于这个值),用这个优化dfs。

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=,Mod=,inf=0x3f3f3f3f,base=;
int n,m,ans,hash[MAXN],f[Mod],G[MAXN][MAXN],d[MAXN];
inline void read(int &x)
{
int data=,w=;
char ch=;
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')w=-,ch=getchar();
while(ch>=''&&ch<='')data=(data<<)+(data<<)+(ch^''),ch=getchar();
x=data*w;
}
inline void init()
{
for(register int i=;i<=n;++i)
for(register int j=;j<=n;++j)G[i][j]=inf;
hash[]=;
for(register int i=;i<=n;++i)hash[i]=(ll)hash[i-]*base%Mod;
for(register int i=;i<Mod;++i)f[i]=2e9;
ans=2e9;
}
inline int fr()
{
int res=;
for(register int i=;i<=n;++i)
if(!d[i])
{
int tmp=inf;
for(register int j=;j<=n;++j)
if(G[i][j]!=inf)
{
if(d[j])tmp=min(tmp,d[j]*G[i][j]);
else tmp=min(tmp,*G[i][j]);
}
res+=tmp;
}
return res;
}
inline void dfs(int k,int val,int hsh)
{
if(val+fr()>=ans||val>=f[hsh])return ;
f[hsh]=val;
if(k==n)
{
ans=min(ans,val);
return ;
}
for(register int i=;i<=n;++i)
if(!d[i])
for(register int j=;j<=n;++j)
if(d[j]&&G[i][j]!=inf)
{
d[i]=d[j]+;
dfs(k+,val+d[j]*G[i][j],(hsh+d[i]*hash[i])%Mod);
d[i]=;
}
}
int main()
{
freopen("treasure.in","r",stdin);
freopen("treasure.out","w",stdout);
read(n);read(m);
init();
for(register int i=;i<=m;++i)
{
int u,v,k;
read(u);read(v);read(k);
if(u==v)continue;
G[u][v]=min(G[u][v],k);
G[v][u]=min(G[v][u],k);
}
for(register int i=;i<=n;++i)
{
d[i]=;
dfs(,,hash[i]);
d[i]=;
}
printf("%d\n",ans);
return ;
}

NOIP2017 宝藏

【比赛】NOIP2017 宝藏的更多相关文章

  1. [NOIP2017]宝藏 状压DP

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

  2. [NOIP2017]宝藏 子集DP

    题面:[NOIP2017]宝藏 题面: 首先我们观察到,如果直接DP,因为每次转移的代价受上一个状态到底选了哪些边的影响,因此无法直接转移. 所以我们考虑分层DP,即每次强制现在加入的点的距离为k(可 ...

  3. NOIP2017宝藏 [搜索/状压dp]

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

  4. NOIP2017 - 宝藏

    LibreOJ链接 Description 给出一个\(n(n\leq12)\)个点\(m(m\leq1000)\)条边的带权无向图,求该图的一棵生成树,使得其边权×该边距根的深度之和最小. Solu ...

  5. Luogu 3959 [NOIP2017] 宝藏

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

  6. 洛谷P3959 [NOIP2017]宝藏

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

  7. NOIP2017 宝藏 题解报告【状压dp】

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

  8. 【洛谷P3959】[NOIP2017] 宝藏

    宝藏 题目链接 首先,打了一个prim,得了45分 #include<iostream> #include<cstring> #include<cstdio> #i ...

  9. [NOIP2017] 宝藏 【树形DP】【状压DP】

    题目分析: 这个做法不是最优的,想找最优解请关闭这篇博客. 首先容易想到用$f[i][S][j]$表示点$i$为根,考虑$S$这些点,$i$的深度为$j$情况的答案. 转移如下: $f[i][S][j ...

随机推荐

  1. 接口测试中抓包工具Charles的使用

    在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切.常见的抓包工具有Charles和Fiddler, Fiddler只能用在Win ...

  2. python爬虫beautifulsoup4系列1

    前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beauti ...

  3. OTRS

    更新OTRS root@localhost密码: sudo -u otrs /opt/otrs/bin/otrs.Console.pl Admin::User::SetPassword root@lo ...

  4. 打包一个传统的ASP.NET web app作为Docker镜像

    (1)针对NerdDinner应用的Dockerfile内容如下 PS E:\DockeronWindows\Chapter02\ch02-nerd-dinner> cat .\Dockerfi ...

  5. day16 类

    初识面向对象 1.   面向过程:  一切以事物的流程为核心.  核心是"过程"二字, 过程是指解决问题的步骤, 即, 先干什么, 后⼲什么. 基于该思想编写程序就好比在编写一套流 ...

  6. 我对BP网络的简单的理解

    最近在学习tf的神经网络算法,十多年没有学习过数学了,本来高中数学的基础,已经彻底还给数学老师了.所以我把各种函数.公式和推导当做黑盒子来用,理解他们能做到什么效果,至于他们是如何做到的,暂时不去深究 ...

  7. 点击小图查看大图jQuery插件FancyBox魔幻灯箱

    今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...

  8. 使用SSD目标检测c++接口编译问题解决记录

    本来SSD做测试的Python接口用起来也是比较方便的,但是如果部署集成的话,肯定要用c++环境,于是动手鼓捣了一下. 编译用的cmake,写的CMakeList.txt,期间碰到一些小问题,简单记录 ...

  9. Django_rest_framework_组件(authentication、permission、throttle)

    认证组件 说明 from rest_framework.authentication import BaseAuthentication class TestAuthentication(BaseAu ...

  10. ORACLE中的异常处理

    异常的语法格式 在begin语句内: exception when then when then when others then --异常处理 --首先创建一份对象的用法 create type x ...