洛谷P1690 贪婪的Copy 题解
题目:https://www.luogu.org/problemnew/show/P1690
分析:
这道题就是一道最短路的题目,因为看到数据范围:
n≤100n\leq100n≤100
所以考虑使用FloydFloydFloyd
我们先用O(n3)O(n^3)O(n3)的时间复杂度来跑一遍FloydFloydFloyd,然后考虑每个藏宝点,发现藏宝点p的范围:
p≤10p\leq10p≤10
我们可以考虑所有情况的穷举,所以说是一个数列的全排列,最多只需要枚举10!=3628800种情况即可。
推荐使用nextnextnext_permutation()permutation()permutation()函数.
此函数比如nextnextnext_permutation(t+1,t+1+p)permutation(t+1,t+1+p)permutation(t+1,t+1+p);
就是生成一下t这个数列从下标1到下标p的下一个全排列。
借此我们即可枚举所有情况。
下面见代码
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int f[105][105],t[15];
int main()
{
int n;
scanf("%d",&n);
memset(f,0x3f3f3f3f,sizeof(f));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&f[i][j]);//存边
}
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
f[i][j]=fmin(f[i][j],f[i][k]+f[k][j]);
}
}
}//Floyd最短路模板,不再赘述
int p;
scanf("%d",&p);
for(int i=1;i<=p;i++)
{
scanf("%d",&t[i]);
}
sort(t+1,t+p+1);//首先排列一下,为从小到大排序,以此为起点
int tmp=1,ans=2147483647;
while(tmp!=0)//还有就是那个函数如果已经用过这种排列,它的返回值就是0
{
tmp=next_permutation(t+1,t+1+p);
int temp=f[1][t[1]]+f[t[p]][n];//挑出特殊的
for(int i=1;i<p;i++)
temp+=f[t[i]][t[i+1]];//循环
ans=fmin(ans,temp);//找最短距离
}
printf("%d",ans);
return 0;//bye~
}
洛谷P1690 贪婪的Copy 题解的更多相关文章
- 洛谷——P1690 贪婪的Copy
P1690 贪婪的Copy 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1&l ...
- 洛谷—— P1690 贪婪的Copy
https://www.luogu.org/problem/show?pid=1690 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地 ...
- 洛谷 P1690 贪婪的Copy
题目 本题难度较低,操作比较简单,首先对于范围较小的N(<=100),我们可以先跑一遍floyd,求出任意两点之间的最短路.对于很小的p(<=15),我们可以直接考虑全排列,运用到next ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
随机推荐
- eclipse 插件编写(三)
参考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_ ...
- zyltimer与ZylIdleTimer
http://www.zylsoft.com/zyltimer.htmhttp://www.zylsoft.com/products.htm
- Notepad2(C语言+Windows消息写的,24592行代码)
C语言+Windows消息写的,24592行代码 http://www.flos-freeware.ch/
- 如何保证MQ消息必达
此文章属于笔记,原属58沈剑 一.MQ消息必达,架构上的两个核心设计点: 消息落地 消息超时.重传.确认 四大部件:发送端 接收端 服务端 固化存储组成 二.上半场消息必达以及消息重复问题 上半场的流 ...
- Java集合 ArrayList原理及使用
ArrayList是集合的一种实现,实现了接口List,List接口继承了Collection接口.Collection是所有集合类的父类.ArrayList使用非常广泛,不论是数据库表查询,exce ...
- python列表和字典的迭代
1.列表和字典的迭代 程序开发中,对列表和字典进行迭代是非常常见的事情. 字典一般可以选择对key进行迭代.对value迭代和对key/value一起迭代 >>> d = {'a': ...
- Java动态规划
1. 介绍 动态规划典型的被用于优化递归算法,因为它们倾向于以指数的方式进行扩展.动态规划主要思想是将复杂问题(带有许多递归调用)分解为更小的子问题,然后将它们保存到内存中,这样我们就不必在每次使用它 ...
- Linux中$的特殊用法
一:变量说明:($表示在执行命令的一些参数) (!) $! #Shell最后运行的后台Process的PID (2) $? #最后运行的命令的结束代码(返回值) ...
- SpringBoot实现文件上传
前言参考:快速开发第一个SpringBoot应用 这篇文章会讲解如何使用SpringBoot完成一个文件上传的过程,并且附带一些SpringBoot开发中需要注意的地方 首先我们写一个文件上传的htm ...
- Tomcat之端口占用问题的解决
我们在使用Tomcat的时候经常会遇到端口占用的问题,如下图所示: 那么怎么解决这个问题呢? 第一步,你得知道什么占据了8080.8005.8009端口: 按win+R,输入cmd,打开命令行窗口,在 ...