#状压dp#洛谷 3959 [NOIP2017 提高组] 宝藏
题目
选定一个起点 \(S\),找到一棵生成树,最小化
\]
\(n\leq 12\)
分析
设 \(dp[d][S]\) 表示当前树中点的状态为 \(S\) ,并且树高为 \(d\) 的最小值,则
\]
这个直接枚举子集可以做到 \(O(n3^n)\)
再看两个集合互相连边最小值 \(f\),这个可以通过枚举新的节点同样做到 \(O(n3^n)\)
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=4096,M=12; int cho[N],b[N];
int two[M],dis[M][M],d[M],dp[2][N],f[N][N],n,m,al,ans;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed min(int a,int b){return a<b?a:b;}
signed main(){
n=iut(),m=iut(),al=(1<<n)-1,two[0]=1,ans=1e8;
if (n==1) return !putchar(48);
for (rr int i=1;i<n;++i) two[i]=two[i-1]<<1;
for (rr int i=0;i<n;++i) cho[two[i]]=i;
for (rr int i=0;i<n;++i)
for (rr int j=0;j<n;++j) dis[i][j]=1e8;
for (rr int i=1;i<=m;++i){
rr int x=iut()-1,y=iut()-1,w=iut();
dis[x][y]=dis[y][x]=min(dis[x][y],w);
}
for (rr int _S=0;_S<=al;++_S){
rr int S=al^_S,tot=0;
for (rr int j=0;j<n;++j) d[j]=1e8,dp[0][_S]=1e8;
for (rr int k=0;k<n;++k) if ((_S>>k)&1)
for (rr int j=0;j<n;++j) d[j]=min(d[j],dis[j][k]);
for (rr int j=S;j;) b[tot++]=j,j=(j-1)&S;
for (rr int j=tot-1;~j;--j)
f[_S][b[j]]=f[_S][b[j]&(b[j]-1)]+d[cho[-b[j]&b[j]]];
}
for (rr int i=0;i<n;++i) dp[0][two[i]]=0;
for (rr int i=1;i<n;++i){
for (rr int _S=0;_S<=al;++_S) dp[i&1][_S]=1e8;
for (rr int _S=1;_S<=al;++_S) if (dp[(i&1)^1][_S]<1e8){
rr int S=al^_S;
for (rr int j=S;j;j=(j-1)&S)
dp[i&1][_S^j]=min(dp[i&1][_S^j],dp[(i&1)^1][_S]+i*f[_S][j]);
}
ans=min(ans,dp[i&1][al]);
}
return !printf("%d",ans);
}
#状压dp#洛谷 3959 [NOIP2017 提高组] 宝藏的更多相关文章
- 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
[题解] 先建反向图,用dijkstra跑出每个点到n的最短距离dis[i] 设f[u][k]表示dis(u,n)<=mindis(u,n)+k的方案数.对于边e(u,v,w),走了这条边的话需 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- NOIP2017[提高组] 宝藏 题解
解析 我们观察范围可以发现n非常的小,(一般来说不是搜索就是状压dp)所以说对于这题我们可以用记忆化搜索或者dp,我们发现起点不同那么最终答案也就不同,也就是说答案是跟起点有关的,于是我们便可以想到去 ...
- 洛谷P1514 [NOIP2010提高组T4]引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- 洛谷P1006 NOIP提高组2008 传纸条
P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无 ...
- 【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]
以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...
- 洛谷 P2678 & [NOIP2015提高组] 跳石头
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...
- 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...
- 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
随机推荐
- Redis原理再学习01:数据结构-跳跃表skiplist
跳跃表skiplist 简介 你一定比较好奇Redis里面的 sorted set 是怎么实现的,底层到底是什么?它的排序功能就是用到了这个skiplist-跳跃表. 什么是跳跃表? 跳跃表可以看做是 ...
- 项目实战:Qt+OSG三维2D文字实时效果查看工具
需求 OSG三维中2D文字的基本属性较多,方便实时查看效果,并出对应文本代码. Demo 工具下载地址 CSDN免积分下载地址:https://download.csdn.net ...
- zookeeper运行时dos窗口一闪而过
错误:从官网下载zookeeper解压到本地之后,鼠标双击运行zkServer.cmd文件,dos窗口一闪而过,看不到错误原因: 解决方法:通过dos窗口执行zkServer.cmd文件,对应的错误信 ...
- SDWebImage从小白到大师蜕变
简介 SDWebImage提供的简洁的获取远程URL图片的API:平时开发中使用最多场景就是列表中的cell中要显示远程图片的需求,在具体的实现中要避免加载图片造成的界面卡顿,列表卡顿等现象的出现:所 ...
- 01、SECS的基本概念
最近做的项目跟半导体设备相关,需要学习SECS相关的内容,把自己的学习记录分享出来,如有不足甚至错误的地方,请不吝赐教,十分感谢! 文章内容基本都是SECS协议的内容和参考的资料,只不过是加了自己的理 ...
- kafka消费者的三种模式
几种不同的注册方式 subscribe方式:当主题分区数量变化或者consumer数量变化时,会进行rebalance:注册rebalance监听器,可以手动管理offset不注册监听器,kafka自 ...
- 轻量级NuGet—BaGet
1. 介绍 BaGet是一个轻量级的包管理服务.有些时候公司或者个人不希望某一些包进行公开,那么就需要使用私有的包管理服务程序,该服务是用.netcore进行编写的(感谢开发者为社区做出的共享) Gi ...
- kotlin协程异常处理之-CoroutineExceptionHandler
转载请标明出处:https://www.cnblogs.com/tangZH/p/17307406.html kotlin协程小记 协程的async使用 kotlin协程异常处理之-try catch ...
- 从零开始搭建Springboot开发环境(Java8+Git+Maven+MySQL+Idea)之一步到位
说明 所谓万事开头难,对于初学Java和Springboot框架的小伙伴往往会花不少时间在开发环境搭建上面.究其原因其实还是不熟悉,作为在IT界摸爬滚打数年的老司机,对于各种开发环境搭建已经了然于胸, ...
- C++ Qt开发:QFileSystemModel文件管理组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFi ...