链接: https://www.nowcoder.com/acm/contest/134/D来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci。经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考虑玩耍的顺序),但是由于他们的班费紧张,所以需要找到一条旅游路线使得他们的花费最少,假设他们制定的旅游路线为V1, V,V... VR,那么他们的总花费为从V1到V2的花费加上V2到V3的花费依次类推,注意从铁子班上到V1的花费和从VR到铁子班上的花费是不需要考虑的,因为这两段花费由学校报销而且我们也不打算告诉你铁子学校的位置。

输入描述:

第一行三个整数n, m, R(2 ≤ n ≤ 200, 1 ≤ m ≤ 5000, 2 ≤ R ≤ min(n, 15))。
第二行R个整数表示需要去玩耍的郊区编号。
以下m行每行Ai, Bi, Ci(1 ≤ Ai, Bi ≤ n, Ai ≠ Bi, Ci ≤ 10000)
保证不存在重边。

输出描述:

输出一行表示最小的花费
示例1

输入

4 6 3
2 3 4
1 2 4
2 3 3
4 3 1
1 4 1
4 2 2
3 1 6

输出

3

思路:先用floyed预处理距离,设一个数组dp[i][j](i为状态,j为当前所在的目标城市),通过状压dp即可解决。

#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
#define inf 0x3f3f3f3f
int n,m,R;
int dist[210][210];
int r[16];
int dp[41000][16];//dp[i][j],i为当前路径状态,j为当前所在的目标城市
int main()
{memset(dist,inf,sizeof(dist));memset(dp,inf,sizeof(dp));scanf("%d%d%d",&n,&m,&R);int x,y,w;for(int i=0;i<R;++i)scanf("%d",&r[i]);for(int i=1;i<=m;++i){scanf("%d%d%d",&x,&y,&w);dist[x][y]=dist[y][x]=w;}for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)for(int k=1;k<=n;++k){if(i==j||j==k||k==i)continue ;dist[j][k]=min(dist[j][k],dist[j][i]+dist[i][k]);}for(int i=0;i<R;++i)dp[1<<i][i]=0;for(int i=1;i<(1<<R);++i)for(int j=0;j<R;++j){if(!(i&(1<<j)))continue ;x=r[j];for(int k=0;k<R;++k){if(i&(1<<k))continue ;y=r[k];dp[i+(1<<k)][k]=min(dp[i+(1<<k)][k],dp[i][j]+dist[x][y]);}}int minx=inf;for(int i=0;i<R;++i)minx=min(minx,dp[(1<<R)-1][i]);printf("%d\n",minx);
}

牛客网 小白月赛4 D-郊区春游 最短路+状压dp相关推荐

  1. 牛客网小白月赛5 H-最大公约数(lcm)

    链接:https://www.nowcoder.com/acm/contest/135/H 来源:牛客网 题目描述 给定两个正整数a,b,求a,b的最小公倍数.(即[a,b]) 输入描述: 两个整整数 ...

  2. 牛客网小白月赛12(华华听月月唱歌)

    链接:https://ac.nowcoder.com/acm/contest/392/A 来源:牛客网 题目描述 月月唱歌超级好听的说!华华听说月月在某个网站发布了自己唱的歌曲,于是把完整的歌曲下载到 ...

  3. 牛客网小白月赛6D 字符串丝带

    链接:https://www.nowcoder.com/acm/contest/136/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言1310 ...

  4. 牛客网——小白月赛13 —— A题

    链接:https://ac.nowcoder.com/acm/contest/549/A 来源:牛客网 题目描述 这是一道签到题,主要考验比赛时的手速. 接下来是一段很简单的代码,或许你提交它就可以A ...

  5. 牛客网小白月赛 10 A B C

    小白月赛越来越不小白了,也可能是我越来越菜了 a题 Actci偶然发现了一个矿洞,这个矿洞的结构类似与一棵二叉树,Actci发现的矿洞恰好位于根节点处,为了尽快挖掘,Actci找来了她的小伙伴们来帮忙 ...

  6. 2018年,牛客网小白月赛5

    第一次啊,补题,希望大佬批评. 题目按我补题顺序来的. https://www.nowcoder.com/acm/contest/135#question H  题 最大公倍数 题意:给出两个数,求最 ...

  7. 牛客网 小白月赛6

    地址链接:点我 A 鲲 分作弊的情况和不作弊的情况 #include <cstdio> #include <cmath>int main() {double L, k, a, ...

  8. 牛客小白月赛4 D.郊区春游

    牛客小白月赛4 D.郊区春游 题目链接 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有 nnn 个郊区和 mmm 条无向道路,第 iii 条道路连接郊区 AiA_iAi​ 和 BiB_i ...

  9. 牛客网 小白赛4 A三角形【贪心】

    [前驱]:在指定长度的棍子中找到能组成最大周长三角形的三根棍子 链接:https://www.nowcoder.com/acm/contest/134/A 来源:牛客网 题目描述 铁子从森林里收集了n ...

最新文章

  1. 博士在读却连矩阵的秩都搞不清,我该如何毕业?
  2. google nexus 5 刷机 卡刷 救砖教程
  3. linux ajp集群,Linux下apache tomcat ajp_proxy 负载均衡+集群+session 复制
  4. delphi ui编辑工具源码_一种无侵入比swagger-ui兼容性更好更简单的API文档生成方案
  5. 二叉树(BST)之创建二叉搜索树
  6. decode encode
  7. [Jarvis OJ - PWN]——Tell Me Something
  8. 算法 --- 顺序查找、二分查找的js实现
  9. canvas 判断哪个元素被点击_监听 Canvas 内部元素点击事件的三种方法
  10. 利用matlab做dsp实验,华工DSP实验一利用Matlab进行频谱分析
  11. Android自定义控件ImageViwe(三)——随手指进行图片的缩放
  12. 自己学java需要多久_自学 java, 学多久可以自己找到工作?
  13. 使用oprofile查找性能瓶颈
  14. 氮化硼纳米片原位负载纳米氧化硅杂化填料|立方氮化硼粉体的表面改性修饰|水溶性六方氮化硼纳米片(BNNS)|茶多酚修饰氮化硼纳米片分散液
  15. jenkins插件镜像源
  16. android 取消选中状态,Android:显示/隐藏偏好检查/取消选中其他CheckBoxPreference
  17. 基于微信小程序的医疗监督反馈小程序的设计与实现-计算机毕业设计源码+LW文档
  18. 【环境部署】基于FreeSSL生成免费SSL证书
  19. Jmeter设置之ramp-up
  20. 基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 2

热门文章

  1. android点击展开内容,Android编程实现Listview点击展开和隐藏的方法
  2. Android 自定义控件之——画个老虎机来玩玩
  3. F5(负载均衡)使用配置文档
  4. 东哥java学习第二天---Java基础
  5. ViewModel是如何在配置更改后继续留存数据的
  6. SQL优化 - Group By 导致的慢sql
  7. android 陀螺仪简单使用,判读手机是否静止状态
  8. FPGA verilog基本外设练习(六)- 以太网通信模块
  9. Webmail攻防实战
  10. 关于《数据仓库知识体系》的超全指南(建议收藏)