洛谷—— P1690 贪婪的Copy

https://www.luogu.org/problem/show?pid=1690

题目描述

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

输入输出格式

输入格式:

第一行一个正整数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个用空格隔开的整数,表示有宝藏的区域编号。

输出格式:

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

输入输出样例

输入样例#1:

样例输入1
2
0 4
5 0
2
1 2

样例输入2
3
0 2 6
1 0 4
7 10 0
1
2

输出样例#1:

样例输出1
4

样例输出1
6

说明

对30%的数据,1<=n<=15,其余如题所述。

对100%的数据,全部数据范围如题所述。

Floyd处理出每个点的之间的距离,全排列更新每次得到宝藏的顺序,依次更新ans

 1 #include <algorithm>
 2 #include <cstdio>
 3
 4 #define max(a,b) (a>b?a:b)
 5 #define min(a,b) (a<b?a:b)
 6 int n,m,ans,pre,dis[110][110],p[11];
 7
 8 int Presist()
 9 {
10     scanf("%d",&n);
11     for(int i=1; i<=n; ++i)
12       for(int j=1; j<=n; ++j)
13         scanf("%d",&dis[i][j]);
14     for(int k=1; k<=n; ++k)
15       for(int i=1; i<=n; ++i)
16           for(int j=1; j<=n; ++j)
17           dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
18     scanf("%d",&m);    ans=0x7fffffff;
19     for(int i=1; i<=m; ++i) scanf("%d",p+i);
20     std::sort(p+1,p+m+1);
21     do {
22         int tmp=0;    pre=1;
23         for(int i=1; i<=m; ++i)
24         {
25             tmp+=dis[pre][p[i]];
26             pre=p[i];
27         }
28         tmp+=dis[pre][n];
29         ans=min(ans,tmp);
30     }while(std::next_permutation(p+1,p+m+1));
31     printf("%d\n",ans);
32     return 0;
33 }
34
35 int Aptal=Presist();
36 int main(int argc,char*argv[]){;}
时间: 2024-10-13 00:37:09

洛谷—— P1690 贪婪的Copy的相关文章

洛谷 P1690 贪婪的Copy

P1690 贪婪的Copy 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1<=Pi<=N)区域.Copy还得知了每个区域之间的距离.现在Copy从1号区域出发,要获得所有的宝藏并到n号区域离开.Copy很懒,只好来找你为他寻找一条合适的线路,使得他走过的距离最短. 输入输出格式 输入格式: 第一行一个正整数N(1<=N<=100) 接下来一个N*N的矩阵,第i+

洛谷——P1690 贪婪的Copy

P1690 贪婪的Copy 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1<=Pi<=N)区域.Copy还得知了每个区域之间的距离.现在Copy从1号区域出发,要获得所有的宝藏并到n号区域离开.Copy很懒,只好来找你为他寻找一条合适的线路,使得他走过的距离最短. 输入输出格式 输入格式: 第一行一个正整数N(1<=N<=100) 接下来一个N*N的矩阵,第i+

Luogu P1690 贪婪的Copy

题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1<=Pi<=N)区域.Copy还得知了每个区域之间的距离.现在Copy从1号区域出发,要获得所有的宝藏并到n号区域离开.Copy很懒,只好来找你为他寻找一条合适的线路,使得他走过的距离最短. 输入输出格式 输入格式: 第一行一个正整数N(1<=N<=100) 接下来一个N*N的矩阵,第i+1行第j列的数字表示区域i,

[洛谷P2184]贪婪大陆

题目大意:有n个点,每次在l~r之间所有点各加上同一种地雷,或询问某一区间内地雷种数. 解题思路:首先注意是“加上”而不是“覆盖”. 然后我们用两棵线段树(树状数组),一棵维护某一区间内左端点个数,另一棵维护右端点个数. 由于每次只加上一个端点,故为单点修改. 那么如何查询呢? 如果1~r内有a个左端点,则说明最多有a种地雷,如果1~l-1内有b个右端点,则说明a种地雷中,有b种的右端点没有达到l(否则一定在l-1之后). 那么查询出a和b,然后输出a-b即可. 很明显是区间修改. 时间复杂度$

VIjos——V 1782 借教室 | | 洛谷——P1083 借教室

https://vijos.org/p/1782|| https://www.luogu.org/problem/show?pid=1083 描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示

洛谷1051 谁拿了最多奖学金 解题报告

洛谷1051 谁拿了最多奖学金 本题地址:http://www.luogu.org/problem/show?pid=1051 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1)     院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2)     五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3)

二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)

在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没有要求.即对于每份

洛谷 P1379 八数码难题 Label:判重&amp;&amp;bfs

特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变. 输入输出格式 输入格式: 输入初试状态,一行九个数字,空格用0表示 输出格式: 只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数

洛谷 P1736 创意吃鱼法

题目描述 题目链接:https://www.luogu.org/problemnew/show/P1736 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1表示对应位置有鱼)有助于决定吃鱼策略. 在代表池子的01矩阵中,有很多的正方形子矩阵,如果某个正方形子矩阵的某条对角线上都有鱼,且此正方形子矩阵的其他地方无鱼,猫猫就可以从这个正方形子矩阵"对角线的一端