$[NOIp2017]$ 宝藏 状压$dp$
\(Sol\)
觉得这里是个很巧妙的地方吖,就是记下当前扩展点集的最大深度,然后强制下一步扩展的点集都是最大深度+1.这样做在当前看可能会导致误算答案导致答案偏大,但是整个\(dp\)完成后一定可以得到最优解.
怎么计算扩展点集的代价呢,显然是要扩展的点向已扩展的点里连最短边,这个可以暴力计算.
注意一个细节就是输入可能有重复的边,取边权最小的即可.图论题都要注意这一点!
\(Code\)
#include<bits/stdc++.h>
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i<=b;++i)
#define yes(i,a,b) for(Ri i=a;i>=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define int long long
#define db double
#define inf 2147400000
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*y;
}
const int N=13,M=1005;
int n,m,S,as,dis[N][N],a[1<<N],f[N][1<<N];
il int lowbit(Ri x){return x&(-x);}
il int cal(Ri i,Ri j)
{
Ri ret=0,i1,j1,tmp=j,cur;
while(i)
{
i1=lowbit(i),j=tmp,cur=inf;i^=i1;
while(j)j1=lowbit(j),j^=j1,cur=min(cur,dis[a[i1]][a[j1]]);
ret+=cur;
}
return ret;
}
signed main()
{
n=read(),m=read(),S=(1<<n)-1;
mem(dis,127);mem(f,127);
go(i,0,n-1)f[1][1<<i]=0,a[1<<i]=i;
go(i,1,m){Ri u=read()-1,v=read()-1;dis[u][v]=dis[v][u]=min(dis[u][v],read());}
go(i,1,S)
{
Ri j=(i-1)&i;
while(j)
{
Ri k=i^j,sum=cal(k,j);
go(dep,2,n)f[dep][i]=min(f[dep][i],f[dep-1][j]+sum*(dep-1));
j=(j-1)&i;
}
}
as=f[1][S];go(i,2,n)as=min(as,f[i][S]);
printf("%lld\n",as);
return 0;
}
随机推荐
- Linux Shell 教程
Shell 教程 Shell 是一个C语言编写的程序,他是用户使用Linux的桥梁,Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面用户通 ...
- Logtail提升采集性能
默认性能限制 为防止滥用消耗过多机器资源,我们对默认安装的Logtail进行了一系列的资源限制.默认安装的Logtail最多日志采集速度为20M/s,20个并发发送. 其他资源限制请参考:启动参数 h ...
- react+antd 点击分页为上次操作结果
最近项目中在使用antd的分页组件时发生了第一次点击分页无变化,再次点击时数据为上一次的分页结果,代码如下: setPageIndex = (pagination)=> { const page ...
- Eclipsed的SVN插件不能识别之前工作空间的项目
今天用Eclipse的SVN插件,由于之前项目是用"tortoisesvn"进行checkout的,并且已经在工作空间中使用.后来用来Ecplise的SVN插件,可是发现右键Tea ...
- 让 AE 输出 MPEG
最近在做视频后期处理,但是我发现 AE 的文件都很大,大概一个 10 分钟视频 10G ,所以有什么办法让他输出的文件变小?一个方法是使用 MPEG 输出. 本文告诉大家如何让 AE 输出 MPEG ...
- [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...
- ajax上传文件 基于jquery form表单上传文件
<script src="/static/js/jquery.js"></script><script> $("#reg-btn&qu ...
- Java RandomAccessFile用法(转载)
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
- 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)
自己也是一个初学者,主要是总结一下最近的学习,大佬见笑. 中文分词说到命名实体抽取,先要了解一下基于字标注的中文分词.比如一句话 "我爱北京天安门”. 分词的结果可以是 “我/爱/北京/天安 ...
- Codeforces Round #561 (Div. 2) E. The LCMs Must be Large(数学)
传送门 题意: 有 n 个商店,第 i 个商店出售正整数 ai: Dora 买了 m 天的东西,第 i 天去了 si 个不同的个商店购买了 si 个数: Dora 的对手 Swiper 在第 i 天去 ...