码迷,mamicode.com
首页 > 其他好文 > 详细

【p1690】贪婪的Copy

时间:2018-10-13 22:49:46      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:一个   perm   print   floyd   空格   namespace   span   std   n+2   

Description

Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地。卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1<=Pi<=N)区域。Copy还得知了每个区域之间的距离。现在Copy从1号区域出发,要获得所有的宝藏并到n号区域离开。Copy很懒,只好来找你为他寻找一条合适的线路,使得他走过的距离最短。

Input

第一行一个正整数N(1<=N<=100)

接下来一个N*N的矩阵,第i+1行第j列的数字表示区域i,j之间的距离。每个距离用空格隔开,距离保证i,j<=1000。请注意的i to j距离并不一定等于j to i的距离。

第N+2行一个整数P(0<=P<=10)。

第N+3行共P个用空格隔开的整数,表示有宝藏的区域编号。

Output

一个整数,为Copy获得全部宝藏需要的最短距离。数据保证答案小于等于maxlongint

\(n\leq 100\) emm,\(Floyd\)水题.

然后看到宝藏最多会有10个.直接枚举全排列即可.

\(STL\)打法吼啊,\(next_permutation\)枚举全排列即可 qwq.

不要忘记加上从\(1\)到第一个有宝藏位置的地方的距离和从最后一个宝藏到\(n\)的距离

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cctype>
#define R register
using namespace std;
inline void in(int &x)
{
    int f=1;x=0;char s=getchar();
    while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
    while(isdigit(s)){x=x*10+s-'0';s=getchar();}
    x*=f;
}
int n,m,dis[108][108],pos[12];
int sum,ans;
int main()
{
    in(n);
    for(R int i=1;i<=n;i++)
        for(R int j=1;j<=n;j++)
            if(i!=j)dis[i][j]=214748364;
    for(R int i=1;i<=n;i++)
        for(R int j=1;j<=n;j++)
            in(dis[i][j]);
    for(R int k=1;k<=n;k++)
        for(R int i=1;i<=n;i++)
            for(R int j=1;j<=n;j++)
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    in(m);
    for(R int i=1;i<=m;i++)
        in(pos[i]);
    sort(pos+1,pos+m+1);
    ans=dis[1][pos[1]]+dis[pos[m]][n];
    for(R int i=1;i<m;i++)
        ans+=dis[pos[i]][pos[i+1]];
    while(next_permutation(pos+1,pos+m+1))
    {
        sum=dis[1][pos[1]]+dis[pos[m]][n];
        for(R int i=1;i<m;i++)
            sum+=dis[pos[i]][pos[i+1]];
        ans=min(ans,sum);
    }
    printf("%d",ans);
}

【p1690】贪婪的Copy

标签:一个   perm   print   floyd   空格   namespace   span   std   n+2   

原文地址:https://www.cnblogs.com/-guz/p/9784225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!