觀光公交

【問題描述】?

風景迷人的小城 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。


?思路:

一道有意思的貪心~

?

解析代碼

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std ;
const int maxn=1005,maxm=10005;int n,m,ans,k;
int lat[maxn],from[maxn],arr[maxn],down[maxn];struct node{int val,tim,l,r;
};struct cmp{inline bool operator ()(node ax,node bx){return ax.val<bx.val;}
};priority_queue<node,vector<node>,cmp>q;struct Node{int y,t;
}a[maxm];void work(int l,int r){if(l>=r) return;if(!from[l]){                    //不花時間?下一個 work(l+1,r);return;}for(int i=l+1;i<r;i++) if(lat[i]>=arr[i]){         //拆分可減速的分段 
            work(l,i),work(i,r);return;}int minn=from[l],val=down[r];   // minn: l 到 l+1 的距離 ,val: r點下車的總人數 for(int i=1+l;i<r;i++) minn=min(minn,arr[i]-lat[i]),val+=down[i]; //找到最優下車所減時間 from[l]-=minn;   //更新 for(int i=1+l;i<r;i++) arr[i]-=minn; //更新 
    q.push((node){val,minn,l,r});  
}int main()
{scanf("%d%d%d",&n,&m,&k);                  // n 站,m 乘客,2 加速 for(int i=1;i<n;i++) scanf("%d",&from[i]); // i -> i+1 的距離 for(int i=1,x;i<=m;i++){                scanf("%d%d%d",&a[i].t,&x,&a[i].y);    // a[i].t 乘客到站時間,從 x 站,到 a[i].ylat[x]=max(a[i].t,lat[x]);             // 從 x 點出發的時間:lat[x]ans-=a[i].t;                           // ans - 起始時間down[a[i].y]++;                        // 終點下車人數
    }for(int i=1;i<n;i++) arr[i+1]=max(arr[i],lat[i])+from[i]; // 更新到站的時間for(int i=2;i<=n;i++) ans+=down[i]*arr[i];                // ans + 到達終點的時間 work(1,n);while(!q.empty() && k)    {node x=q.top();q.pop();ans-=x.val*min(x.tim,k);k-=min(x.tim,k);if(k) work(x.l,x.r); //看能不能再減 
    }printf("%d\n",ans);return 0;
}
/* 
3 3 2 
1 4 
0 1 3 
1 1 2 
5 2 3 
*/  

?

轉載于:https://www.cnblogs.com/qseer/p/9600184.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388590.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux行命令測網速,Linux命令行測試網速的方法

最近給服務器調整了互聯網帶寬的限速策略&#xff0c;調到100M讓自己網站也爽一下。一般在windows上我喜歡用speedtest.net來測試&#xff0c;測速結果也被大家認可。在linux上speedtest.net提供了一個命令行工具speedtest-cli&#xff0c;用起來很方便&#xff0c;這里分享一下…

Delphi XE2獲取漢字拼音首字母

function CnPYIndex(const CnString: string): string;{ 返回中文的拼音首字母}const ChinaCode: array[0..25, 0..1] of Integer ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), …

圖像處理傅里葉變換圖像變化_傅里葉變換和圖像床單視圖。

圖像處理傅里葉變換圖像變化What do Fourier Transforms do? What do the Fourier modes represent? Why are Fourier Transforms notoriously popular for data compression? These are the questions this article aims to address using an interesting analogy to repre…

HDUOJ 1062 TEXT REVERSE

#include<iostream> #include<stdlib.h> #include <iomanip> #include<stack> using namespace std;int main(){//次數int n 0;while (cin >> n) {//這里需要讀一個字符&#xff0c;需要消除換行符的影響getchar();while (n--) {char c;stack&l…

VC++的windows服務

項目建立&#xff1a; VS2008->ATL項目->服務exe 服務部署&#xff1a; 在VS2008中新建的ATL項目&#xff0c;在網上看到的流程中都會有注冊服務這一項。 但是對服務的注冊都是只給了一個指令&#xff0c;一句話帶過&#xff0c;沒有給出具體的操作步驟 經過多次試驗…

linux中gradle編譯慢,【Linux】解決linux下android studio用gradle構建從jcenter或maven下載依賴太慢...

一個簡單的辦法&#xff0c;修改項目根目錄下的build.gradle&#xff0c;將jcenter()或者mavenCentral()替換掉即可&#xff1a;allprojects {repositories {maven{ url http://maven.oschina.net/content/groups/public/}}}但如果你有很多個項目的話&#xff0c;一個一個的改估…

MFC程序需要的函數庫及頭文件--《深入淺出MFC》

Windows程序調用的函數可分為2部分&#xff1a;C Runtimes Windows API。 C Runtimes&#xff1a; LIBC.LIB -- C Runtime函數庫的靜態鏈接版本 MSVSRT.LIB--C Runtime庫的動態鏈接版本&#xff08;如果要鏈接這一函數&#xff0c;你的程序執行時必須有MSVCRT40.DLL在場&#…

C#DNS域名解析工具(DnsLookup)

C#DNS域名解析工具(DnsLookup) DNS域名解析工具&#xff1a;DnsLookup 輸入域名后點擊Resolve按鈕即可。 主要實現代碼如下&#xff1a; private void btnResolve_Click ( object sender, EventArgs e ) {lstIPs.Items.Clear ( ); //首先把結果里的ListBox清空 try {IPHostE…

python.day05

一 字典 定義:dict, 以{},表示.每一項用逗號隔開,內部元素用key:value的形式來保存數據.例如 {"jj":"林俊杰","jay:周杰倫"} 特點:查詢效率非常高,通過key來查找元素 內部使用key來計算一個內存地址(暫時),hash算法,key必須不可變的數據類型(ke…

滯后分析rstudio_使用RStudio進行A / B測試分析

滯后分析rstudioThe purpose of this article is to provide some guide on how to conduct analysis of a sample scenario A/B test results using R, evaluate the results and draw conclusions based on the analysis.本文的目的是提供一些指南&#xff0c;說明如何使用R對…

Linux程序實現彈框,jQuery實現彈出框 效果絕對美觀

使用到JQeury寫的幾個比較好的Popup DialogBox,覺得不錯。和大家分享下。使用它們結合.net可以實現很好的效果。1.jqpopup:是個可以拖拽,縮放并可以在它上面顯示html頁面上任何一個控件組合的控件。可以和后面的主頁面通信。使用方法:先調用這幾個js文件,可以自提供的下載地址下…

Interesting visualization tools for profiling.

Interesting visualization tools for profiling. http://dtrace.org/blogs/brendan/2012/03/17/linux-kernel-performance-flame-graphs/ http://dtrace.org/blogs/brendan/2013/07/01/detecting-outliers/

MySQL的事務-原子性

MySQL的事務處理具有ACID的特性&#xff0c;即原子性&#xff08;Atomicity)、一致性&#xff08;Consistency&#xff09;、隔離性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 1. 原子性指的是事務中所有操作都是原子性的&#xff0c;要…

codeforces CF438D The Child and Sequence 線段樹

$ \Rightarrow $ 戳我進CF原題 D. The Child and Sequencetime limit per test: 4 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: standard outputAt the childrens day, the child came to Pickss house, and messed his house up. Picks was ang…

大型網站架構演變

今天我們來談談一個網站一般是如何一步步來構建起系統架構的&#xff0c;雖然我們希望網站一開始就能有一個很好的架構&#xff0c;但馬克思告訴我們事物是在發展中不斷前進的&#xff0c;網站架構也是隨著業務的擴大、用戶的需求不斷完善的&#xff0c;下面是一個網站架構逐步…

linux的磁盤磁頭瓷片作用,Linux 磁盤管理

硬盤物理結構以下三張圖片都是磁盤的實物圖&#xff0c;一個磁盤是由多塊堆放的瓷片組成的&#xff0c;所以磁頭的結構也是堆疊的&#xff0c;他要對每一塊瓷片進行讀取&#xff0c;磁頭是可以在不同磁道(在瓷片的表現為不同直徑的同心圓&#xff0c;磁道間是有間隔的)之間移動…

多層插件開發框架

先來幾張效果圖&#xff1a; 1.基于DATASNAP構建的中間件&#xff0c;中間件已經經過實際項目的檢驗&#xff0c;單臺中間件可支持幾千客戶端&#xff0c;中間件可集群 2.中間件支持同時連接ACCESS\SQL SERVER\MYSQL\ORACLE。。。多種數據庫系統 3.中間件同時支持TCP/IP,HTTP&a…

unity3d 可視化編程_R編程系列:R中的3D可視化

unity3d 可視化編程In the last blog, we have learned how to create “Dynamic Maps Using ggplot2“. In this article, we will explore more into the 3D visualization in R programming language by using the plot3d package.在上一個博客中&#xff0c;我們學習了如何…

linux無法設置變量,linux – crontab在作業之前無法設置變量

我的crontab看起來像&#xff1a;rootslack13x64:~# crontab -l -u dnd# some variablesSHELL/bin/bashPATH/bin:/usr/bin:/usr/local/bin:/home/dnd/binMAILTOroot# Actual jobs40 20 * * * /home/dnd/cron_jobs/some_job.sh55 23 * * Fri /home/dnd/cron_jobs/other_job.py作…

詳談P(查準率),R(查全率),F1值

怎么來的&#xff1f; 我們平時用的精度accuracy&#xff0c;也就是整體的正確率 acc predict_right_num / predict_num 這個雖然常用&#xff0c;但不能滿足所有任務的需求。比如&#xff0c;因為香蕉太多了&#xff0c;也不能撥開人工的一個一個的看它的好壞(我愛吃啊&#…