#状压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 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
随机推荐
- tomcat启动错误“The temporary upload location”
目录 问题的原因 解决方案 临时的,直接重新启动项目就行,会重新建立临时文件夹 在配置文件中配置tomcat的临时目录: 写个配置类,通过@Bean的方式配置目录: 问题的原因 在Linux 系统中, ...
- 【Azure 环境】当Azure Key Vault中存储的证书即将过期时,如何设置Alert邮件警报?
问题描述 当Azure Key Vault 中存储的证书即将过期时, 如何设置Alert邮件警报? 问题解答 首先,在创建完一个证书后,需要为证书添加一个"证书联系人" 然后,点击 ...
- 【Azure 应用服务】如何关掉App Service/Function App的FTP部署, 使之变成FTPS
问题描述 如何关掉App Service/Function App的FTP部署, 使之变成FTPS方式呢? 问题解答 在应用服务/函数应用的配置下选择右边的常规设置,然后修改FTP状态为"仅 ...
- 浅入 ABP系列(3):增加日志组件、依赖注入服务
目录 自动依赖注入 添加日志依赖 添加日志功能 依赖注入 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 前面两篇我们搭建了一个基础的.简单的,具有统一响应格式的 ...
- Linux 多进程服务配置 systemd
目录 Linux 多进程服务配置 systemd sysvinit和systemd 多进程保活 创建配置文件(设定重试次数) 多进程服务管理 链式启动(服务依赖) 指定关闭进程方式 - ExecSto ...
- C++ //常用查找算法 find_if
1 //常用查找算法 find_if 2 #include<iostream> 3 #include<string> 4 #include<vector> 5 #i ...
- linux 三剑客命令
Linux 命令集合 目录 Linux 命令集合 基础概念 1 软连接和硬链接 1.1 基础概念 1.2 如何创建软链接 零.正则 01 区别 02 通配符 03 基础正则 04 扩展正则 一 awk ...
- 写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索。这样就能配合wox进行单词的搜索了。
写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索.这样就能配合wox进行单词的搜索了. // ==UserScript== // @name dict.cn // @namespace ...
- day12-面向对象03
面向对象03 10.抽象类 abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法:如果修饰类,那么该类就是抽象类 抽象类中可以没有抽象方法,但是有抽象方法的类一定要 ...
- .NET开源快速、强大、免费的电子表格组件
前言 今天大姚给大家分享一个.NET开源(MIT License).快速.强大.免费的电子表格组件,支持数据格式.冻结.大纲.公式计算.图表.脚本执行等.兼容 Excel 2007 (.xlsx) 格 ...