[计蒜客20191103D] 坐车
n 个学生将要坐车去餐厅,每辆车最多可以坐 5 个人并且出于对环境的考虑他们不会使用多余的车.车的速度为每秒 1 个单位。现在 ii 号同学需要去 \(i\) 号点停 5 分钟(此时整车都在 i 号点等待),他们现在希望最小化花费时间最长的车花费的时间. 0 号点为起点,\(n+1\) 号点为餐厅
输入格式
第一行两个整数分别表示 \(n,m\)
接下来 m 行每行三个整数分别是 u,v,w,表示这条路连接 u,v 长度为 w
输出格式
输出花费时间最长的车花费时间最小为多少
数据范围
对于 30% 的数据,$ 1 \leq n \leq 5$
对于 50% 的数据, \(1 \leq n \leq 10\)
对于 100% 的数据,$ 1 \leq n \leq 15,1 \leq m \leq 1000,0 \leq u,v \leq n+1,1 \leq w \leq 10^7$
7
输出时每行末尾的多余空格,不影响答案正确性
样例输入
7 15
0 1 100
8 1 100
0 2 100
8 2 100
0 3 100
8 3 100
0 3 50
3 4 50
3 5 40
1 5 50
5 6 20
1 6 20
3 6 10
6 7 10
7 8 10
样例输出复制
280
首先可以用Floyd算出任意两点之间的距离。
然后可以暴力枚举怎么分组,每一组暴力看按什么顺序会最优。但是这样会超时。
所以我们在枚举出来每一组后记下来这一种分配全排列的最优值。也就是说,如果有一次分出来(1,2,3,4,5)一组,那么就计算完后记录答案,下一次把(1,2,3,4,5)分到一组时,就可以直接回答。这样就可以过了。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int u,v,w,n,m;
int dp[25][25],t[25],st[5][10],jyh[25][25][25][25][25];
long long ans=1LL*1e18,cnt,ret;
long long check(int x,int g[25])
{
if(jyh[g[1]][g[2]][g[3]][g[4]][g[5]])
return jyh[g[1]][g[2]][g[3]][g[4]][g[5]];
ret=1000000000,t;
do
{
long long t=0;
for(int i=2;i<=x;i++)
t+=dp[g[i]][g[i-1]];
t+=dp[0][g[1]]+dp[g[x]][n+1];
ret=min(ret,t);
}while(next_permutation(g+1,g+x+1));
return jyh[g[1]][g[2]][g[3]][g[4]][g[5]]=ret+x*5;
}
void dfs(int x)
{
if(x>n)
{
cnt=0;
for(int i=1;i<=m;i++)
cnt=max(check(t[i],st[i]),cnt);
ans=min(ans,cnt);
}
for(int i=1;i<=m;i++)
{
if(t[i]<5)
{
st[i][++t[i]]=x;
dfs(x+1);
st[i][t[i]--]=0;
}
}
}
int main()
{
memset(dp,0x3f,sizeof(dp));
cin>>n>>m;
while(m--)
{
cin>>u>>v>>w;
dp[u][v]=dp[v][u]=min(dp[u][v],w);
}
for(int k=0;k<=n+1;k++)
for(int i=0;i<=n+1;i++)
for(int j=0;j<=n+1;j++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
m=(n-1)/5+1;
dfs(1);
cout<<ans<<endl;
}
[计蒜客20191103D] 坐车的更多相关文章
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)
https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...
- 计蒜客 31436 - 提高水平 - [状压DP]
题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...
- 计蒜客 31434 - 广场车神 - [DP+前缀和]
题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...
随机推荐
- Sealos 国内集群正式上线,可一键运行 LLama2 中文版大模型!
2023 年 7 月 19 日,MetaAI 宣布开源旗下的 LLama2 大模型,Meta 首席科学家.图灵奖得主 Yann LeCun 在推特上表示 Meta 此举可能将改变大模型行业的竞争格局. ...
- 手写RISC-V处理器(1)
由来 由于去年工作变动,有幸进入了芯片行业,但主要工作内容为基于RISC-V的嵌入式应用软件开发,几乎接触不到芯片设计的相关知识,然而随着工作的深入,越来越想探究一下运行在软件之下的CPU的世界,于是 ...
- 【微信自动化】使用c#实现微信自动化
引言 上个月,在一个群里摸鱼划水空度日,看到了一个老哥分享的一个微信自动化的一个类库,便下载了他的Demo,其本意就是模拟鼠标来操作UI,实现UI自动化:然后自己在瞎琢磨研究,写了一个简单的例子,用来 ...
- Jmeter获取Websocket多帧消息的实现方法
由于需要对WebSocket进行压力测试,因此又回归到了JMeter的使用.网络上缺少具体的获取多帧消息的操作,且自己也踩了两个坑,总结一下可行的操作供大家参考. 一.情况说明 ...
- redisson分布式锁的应用——秒杀、超卖 简单例子(分布式锁相关)
1.常见的分布式事务锁 1.数据库级别的锁 乐观锁,给予加入版本号实现 悲观锁,基于数据库的for update实现 2.Redis,基于SETNX.EXPIRE实现 3.Zookeeper,基于In ...
- netstat命令输出详解
netstat命令输出详解 1. 列出所有的TCP和UDP端口 2. 命令输出详解 Proto:协议名(tcp协议还是udp协议) recv-Q:网络接收队列,send-Q:网路发送队列 a. rec ...
- webgl centroid质心插值的一点理解
质心插值说的是什么 2023.10.04再次review这个细节点: https://www.opengl.org/pipeline/article/vol003_6/ https://github. ...
- 记一次Redis Cluster Pipeline导致的死锁问题
作者:vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程.通过查看Dubbo线程状态.分析Jedis连接池获取连接的源码.排查死锁条件等方面,最终确认是因为 ...
- 手撕Vue-界面驱动数据更新
经过上一篇文章,已经将数据驱动界面改变的过程实现了,本章节将实现界面驱动数据更新的过程. 界面驱动数据更新的过程,主要是通过 v-model 指令实现的, 只有 v-model 指令才能实现界面驱动数 ...
- JS中的caller属性
JS中的caller属性: 这个属性会返回一个调用该函数对象的外层函数引用.也就是说,如果我们是在函数B()中调用函数A()的,那么只要在A()中调用A.caller,结果就会返回B()functio ...