NOIP2011 观光公交

本文介绍了一个关于观光公交调度的问题,通过贪心算法实现对公交行驶时间的优化,以减少乘客的等待时间。针对不同数量的乘客和加速器,提出了有效的算法解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.观光公交

(bus.cpp/c/pas)

 

风景迷人的小城 Y 市,拥有 n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特 意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第 0 分钟出现在 1 号景点,随后依次前往 2、3、4……n 号景点。从第 i 号景点开到第 i+1 号景点需要 Di 分钟。 任意时刻,公交车只能往前开,或在景点处等待。

设共有 m 个游客,每位游客需要乘车 1 次从一个景点到达另一个景点,第 i 位游客在

Ti 分钟来到景点 Ai,希望乘车前往景点 Bi(Ai<Bi)。为了使所有乘客都能顺利到达目的地,

 

 

 

公交车在每站都必须等待需要从该景点出发的所有乘客都上车后才能出发开往下一景点。

假设乘客上下车不需要时间。 一个乘客的旅行时间,等于他到达目的地的时刻减去他来到出发地的时刻。因为只有一

辆观光车,有时候还要停下来等其他乘客,乘客们纷纷抱怨旅行时间太长了。于是聪明的司 机 ZZ 给公交车安装了 k 个氮气加速器,每使用一个加速器,可以使其中一个 Di 减 1。对于 同一个 Di 可以重复使用加速器,但是必须保证使用后 Di 大于等于 0。

那么 ZZ 该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?

 

【输入】

输入文件名为 bus.in。

第 1 行是 3 个整数 n, m, k,每两个整数之间用一个空格隔开。分别表示景点数、乘客数

和氮气加速器个数。

第 2 行是 n-1 个整数,每两个整数之间用一个空格隔开,第 i 个数表示从第 i 个景点开 往第 i+1 个景点所需要的时间,即 Di。

第 3 行至 m+2 行每行 3 个整数 Ti, Ai, Bi,每两个整数之间用一个空格隔开。第 i+2 行表 示第 i 位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。

 

【输出】

输出文件名为 bus.out。共一行,包含一个整数,表示最小的总旅行时间。

 

【输入输出样例】

 

bus.in   bus.out

3 3 2

1 4

0 1 3

1 1 2

5 2 3    10

【输入输出样例说明】

对 D2 使用 2 个加速器,从 2 号景点到 3 号景点时间变为 2 分钟。

公交车在第 1 分钟从 1 号景点出发,第 2 分钟到达 2 号景点,第 5 分钟从 2 号景点出发, 第 7 分钟到达 3 号景点。

第 1 个旅客旅行时间 7-0 = 7 分钟。 第 2 个旅客旅行时间 2-1 = 1 分钟。 第 3 个旅客旅行时间 7-5 = 2 分钟。 总时间 7+1+2 = 10 分钟。

【数据范围】

对于 10%的数据,k=0; 对于 20%的数据,k=1;

对于 40%的数据,2 ≤ n ≤ 50,1 ≤ m ≤ 1,000,0 ≤ k ≤ 20,0 ≤ Di ≤ 10,0 ≤ Ti ≤ 500;

对于 60%的数据,1 ≤ n ≤ 100,1 ≤ m ≤ 1,000,0 ≤ k ≤ 100,0 ≤ Di ≤ 100,0 ≤ Ti ≤ 10,000;

对于 100% 的数据,1 ≤ n ≤ 1,000 ,1 ≤ m ≤ 10,000 ,0 ≤ k ≤ 100,000 ,0 ≤ Di ≤ 100 ,

0 ≤ Ti ≤ 100,000。

 

 

【思路】

   贪心。

   考虑没有加速器的情况,可以由题目条件求出观光车到达每个车站的时间time,递归求解如下:

     time[i]=max{ time[i-1] , t[i-1] }+d[i-1]

   再考虑有加速器的情况,注意使用一个加速器相当于对于一部分人的时间-1。对于边i使用加速器,一定可以使在i+1站下车的人数时间-1,如果time[i+1]>=t[i+1]则观光车需要等待i+1站的人上车后才能走所以加速器的“加速效果”停止于i+1;否则,加速器的效果可以延续。如果设g[i]表示对i边加速所能延续到的最大车站则有以下递推式:

     g[i]=time[i+1]>=t[i+1]? i+1 : g[i+1]

  令sum(j)表示到j及以前下车的人数。每次贪心选择sum(g[i])-sum(i)最大及加速效果最优的边进行加速,直到用尽所有的加速器或不能加速。

 

【代码】

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 const int maxn = 10000+10;
 6 struct Node{
 7     int T,from,to;
 8 }a[maxn];
 9 
10 int n,m,K;
11 int times[maxn],t[maxn],g[maxn],d[maxn];
12 int sum[maxn];
13 
14 int main() {
15     ios::sync_with_stdio(false);
16     
17     cin>>n>>m>>K;
18     for(int i=1;i<n;i++) cin>>d[i];
19     for(int i=1;i<=m;i++) {
20        cin>>a[i].T>>a[i].from>>a[i].to;
21        t[a[i].from]=max(t[a[i].from],a[i].T);  //t[i]是从 i 出发的最大时间 
22        sum[a[i].to] ++;
23     }
24     for(int i=2;i<=n;i++)    //到达 i 及 i 之前的人数 
25         sum[i] += sum[i-1]; 
26     
27     int ans=0;
28     times[1]=t[1];
29     for(int i=2;i<=n;i++) 
30        times[i]=max(times[i-1],t[i-1])+d[i-1];
31     for(int i=1;i<=m;i++) {  //m //统计没有加速器的 ans 
32         ans += times[a[i].to]-a[i].T;
33     }
34     while(K--) {
35         g[n] = g[n-1] = n;
36         for(int i=n-2;i;i--)   //维护 g 
37           g[i]=(times[i+1]<=t[i+1])? i+1 : g[i+1];
38         
39         int _max=0,k;
40         for(int i=1;i<n;i++) {  //找到使用加速器最有效的边 
41             if(sum[g[i]]-sum[i]>_max && d[i]>0) {  //d[i]>0
42                 _max=sum[g[i]]-sum[i];
43                 k=i;
44             }
45         }
46         
47         if(!_max) break;
48         
49         ans -= _max;   //使用加速器缩短时间 
50         d[k] --;
51         
52         times[1]=t[1];
53         for(int i=2;i<=n;i++)   //维护 time 
54            times[i]=max(times[i-1],t[i-1])+d[i-1];
55     }
56     
57     cout<<ans;
58     return 0;
59 }

 

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值