Codeforces Round #433 Jury Meeting

博客内容概述:该篇博客详细介绍了Codeforces Round #433中的一道名为"Jury Meeting"的问题。问题涉及到n个地点和m次航班,参赛者需要规划使得所有人员能以最低成本抵达地点0,并在那里停留k天后返回原地点。博主提出了使用动态规划的方法,从前向后和从后向前分别计算到达和离开地点0的最小花费,并利用标记和后缀最值技巧找到最优解。
摘要由CSDN通过智能技术生成

D. Jury Meeting

题目链接
题意是给有n个地点,m次航班,每次航班有4个信息,起飞日期di、出发地fi、目的地ti、花费ci,起飞和出发地至少有一个是地点0。现在n个地点,每个地点有一个人,他们要到地点0,当所有人都到达的时候,一起待k天,然后再分别回到n个地点。问说最小的花费是多少,如果达不到这个要求输出-1。

我们考虑从前往后对日期做一个dp,维护dp[i]第i天到达0点的最小花费,再维护一个dis[j],表示从j出发到0的最小花费。每天得到一个航班信息,如果这个出发地还没有过,那么把这个花费算到dp[i]里,更新dis[j],如果这个出发地有过了,但是当前的花费小于dis[j],那么更新一下dp[i]的最小花费,同时更新一下这个dis[j]。注意,当所有人都到达0地的时候我们做一个标记。
然后从后往前同理做一个dp2[i],从后往前地维护第i天离开0地的最小花费,维护方式同上。注意:当所有人离开0地的时候我们也做一个标记
最后答案我们从前往后扫,对于第i天,如果所有人都到达了0地,答案是就是dp[i]加上 ( i + k + 1) 到 最终的航班日期 这段日期中做过标记且花费最少的那部分。(这里我们可以用数组的后缀最值来算比较快,没有标记过的我们算正无穷)。

#include<bits/stdc++.h>
using namespace std;
#define  LONG long long
const LONG    INF=0x3f3f3f3f;
const LONG  MOD=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值