$[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;
}
随机推荐
- 14-1 jquery的dom操作和事件对象
一 jquery的操作有,插入,修改,删除,克隆.具体见下方代码实例: <!DOCTYPE html> <html lang="en"> <head& ...
- Python语言的缺点
- uda 1.C++ 函数
函数:Python vs C++ 在 Python 和 C++ 中,函数的作用相同:函数把语句组合在一起,执行某种任务.函数可以帮助你避免重复地复制和粘贴相同的代码. 函数编写的语法有些不同,主要有三 ...
- Wood Processing牛客第十场 斜率优化DP
卧槽我感觉写的是对的,但是就是样例都过不了...留坑 #include<iostream> #include<stdio.h> #include<string.h> ...
- oracle避免使用耗费资源的操作
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需 ...
- ip2long之后有什么好处?
ip2long需要bigint来存储,而且在32位和64位系统中存储方式还有区别: 而保存成字符串,只需要char20即可. 那么,ip2long好处在哪? 做投票项目的时候,将ip地址处理后用int ...
- Mule自带例子之flight-reservation
1 配置效果图 2 应用的配置文件 <?xml version="1.0" encoding="UTF-8"?> <mule xmlns:sc ...
- (超级详细版)利用ThinkPHP3.2.3+PHPExcel实现将表格数据导入到数据库
请先阅读以下步骤再到结尾下载源码 第一步:下载 thinkphp_3.2.3 和 PHPExcel_1.8.0 并解压 对应的网站分别为: http://www.thinkphp.cn/down.ht ...
- python基础十一之装饰器进阶
函数的双下划线方法 def hahahha(): """测试函数""" print('zxc') print(hahahha.__name_ ...
- java 面试题之银行业务系统
1.需求 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客 ...