题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1624

题意:

  农夫约翰正驾驶一条小艇在牛勒比海上航行。

  海上有N(1≤N≤100)个岛屿,用1到N编号。

  约翰从1号小岛出发,最后到达N号小岛。

  一张藏宝图上说,如果他的路程上经过的小岛依次出现了Ai,A2,…,AM(2≤M≤10000)这样的序列(不一定相邻),那他最终就能找到古老的宝藏。

  但是,由于牛勒比海有海盗出没.约翰知道任意两个岛屿之间的航线上海盗出没的概率,他用一个危险指数Dij(0≤Dij≤100000)来描述。

  他希望他的寻宝活动经过的航线危险指数之和最小。

  那么,在找到宝藏的前提下,这个最小的危险指数是多少呢?

题解:

  floyd.

  然后求从1到a[1]、a[1]到a[2]...a[m]到n的dis之和。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_M 10005 using namespace std; int n,m;
int ans=;
int a[MAX_M];
int dis[MAX_N][MAX_N]; void read()
{
cin>>n>>m;
a[]=;
a[m+]=n;
for(int i=;i<=m;i++)
{
cin>>a[i];
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
cin>>dis[i][j];
}
}
} void floyd()
{
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(i!=j && j!=k && i!=k)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
}
} void solve()
{
floyd();
for(int i=;i<=m;i++)
{
ans+=dis[a[i]][a[i+]];
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

最新文章

  1. bootstrap
  2. 设置nginx禁止IP直接访问,只能通过指定的域名访问
  3. C#/net 使用Protocol Buffers入门
  4. IE10、IE11 User-Agent 网站无法写入Cookie 问题[转]
  5. Flex 列表控件中的操作
  6. wpf 动画 2个窗体切换
  7. PS基础学习 2---图层蒙版
  8. javascript权威指南(2)
  9. Linux内置命令
  10. redis中的aof模式,产生的是增量数据,还是全量数据?
  11. JAVA中的静态成员
  12. cocos大量对象使用动作注意事项
  13. BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图
  14. HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
  15. LeetCode - Subtree of Another Tree
  16. 给浏览器和各种软件配置 http https socks5 代理 proxy
  17. 再议js的传递和深复制
  18. centos7 安装 gitolite (git服务器)
  19. 高通8X16电池BMS算法(二)【转】
  20. 具体问题:3、hibernate跟Mybatis/ ibatis 的区别,为什么选择?

热门文章

  1. 提高速度 history 的利用
  2. cookie理解
  3. GCD CoreData 简化CoreData操作(转)
  4. 【linux】CentOS编译程序报错 修复 ./Modules/_ssl.c:64:25: 致命错误:openssl/rsa.h:没有那个文件或目录
  5. Swagger学习和实践
  6. Mondiran创建连接
  7. Phpstorm 放大字体的快捷键是什么?
  8. react webapp 开发小结
  9. 综合运用: C++11 多线程下生产者消费者模型详解(转)
  10. java.lang.String中的trim()方法的详细说明(转)