【NOIP2011 Day 2】觀光公交

【問題描述】

  小城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該如何安排使用加速器,才能使所有乘客的旅行時間總和最小?

  對于100%的數據,1≤n≤1,000,1≤m≤10,000,0≤k≤100,000,0≤Di ≤100,0≤Ti≤100,000。

【分析】

  設t[i]表示來到第i個景點的乘客最晚的時間,time[i]表示車到達第i個景點的最小時間。

  因為每個乘客到達的時間已經固定,所以要使總時間最小,就是使Σtime[b[i]]最小,其中b[i]代表每位乘客的目的地。

  先考慮不用加速器的情況。可以直接遞推求出答案,time[i] = max(time[i - 1],t[i - 1]) + d[i - 1];

  接下來再來考慮使用加速器減少的時間。對于每個加速器,我們必須使這個加速器獲得最大的效益,即使盡可能多的乘客旅行時間減一。如果我們在i到i + 1間使用加速器的話,那么到i + 1站的乘客的旅行時間都會減一,但是如果time[i + 1]小于t[i + 1]的話,車就要在i + 1站等到t[i + 1]所有的乘客上車,在i + 1站以后下車的乘客的時間是一樣的,也就是說這個加速器對后面下車的乘客沒有影響。我們可以用遞推求出每個i最遠能影響的車站。

  g[i] = g[i + 1] ? ?(time[i + 1] > t[i + 1])

  g[i] = i + 1 (time[i + 1] <= t[i + 1])

  那么,我們用一個加速器所能減少一個單位時間的乘客就是sum[g[i]] - sum[i],每次找出使這個最大的i即可。然后把ans減掉,維護time,g

  這題說白了就是貪心。加速器的使用各不影響。易知這個貪心是正確的。

  代碼還是比較好寫的。

【代碼】

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{int start,arrive,target;
}a[20000];
int n,m,K,ans;
int f[20000],Time[20000],g[20000],dist[20000],sum[20000];
int main()
{scanf("%d %d %d",&n,&m,&K);for (int i = 1;i < n;i ++)scanf("%d",&dist[i]);for (int i = 1;i <= m;i ++){scanf("%d %d %d",&a[i].arrive,&a[i].start,&a[i].target);f[a[i].start] = max(f[a[i].start],a[i].arrive);sum[a[i].target] ++ ;}for (int i = 2;i <= n;i ++)sum[i] += sum[i - 1];Time[1] = 0;for (int i = 2;i <= n;i ++)Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];for (int i = 1;i <= m;i ++)ans += Time[a[i].target] - a[i].arrive;while (K){g[n] = n;g[n - 1] = n;for (int i = n - 2;i ; i -- ){if (Time[i + 1] <= f[i + 1])g[i] = i + 1;else g[i] = g[i + 1];}int Max = 0,j;for (int i = 1;i <= n;i ++)if (sum[g[i]] - sum[i] > Max && dist[i] > 0)Max = sum[g[i]] - sum[i],j = i;if (!Max) break;ans -= Max;dist[j] --;K --;Time[1] = 0;for (int i = 2;i <= n;i ++)Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];}cout << ans;
}

?

?

轉載于:https://www.cnblogs.com/N-C-Derek/p/3371058.html

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

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

相關文章

基本數據類型的自動裝箱

這里以Integer類型舉例&#xff1a; Integer a 1; a 2; 編譯后.calss文件是這樣的 Integer a Integer.valueOf(1); 自動裝箱 a Integer.valueOf(a.intValue() 2); 自動拆箱&#xff0c;再自動裝箱 轉載于:https://www.cnblogs.com/feiZhou/p/9344494.html

自媒體和計算機相關嗎,做自媒體,臺式電腦跟筆記本電腦用哪個好呢?

四阿哥fly回答數&#xff1a;143 | 被采納數&#xff1a;162019-06-29 12:16:21作為去年折騰了一年自媒體&#xff0c;各種情況遇到過&#xff0c;分享下臺式電腦和筆記本到底哪個好&#xff1f;好在哪里&#xff1f;如果真的要選擇&#xff0c;個人還是推薦用臺式比較好。工…

JS腳本顯示當前日期+星期幾[轉]

以下的代碼提供了顯示當前日期和星期幾的實現方法&#xff1a; function writeDateInfo() { var day""; var month""; var ampm""; var ampmhour""; var myweekday""; var…

openCV中waitKey函數介紹

#include <opencv2/opencv.hpp> #include < iostream > #include <window.h> using namespace cv; using namespace std;int main() {Mat im;double duration;im imread("1.jpg");// 測試沒有namedWindow時的waitKey執行時間duration static_cas…

JavaScript indexOf() 方法 和 lastIndexOf() 方法

indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置。 lastIndexOf() 方法可返回一個指定的字符串值最后出現的位置&#xff0c;在一個字符串中的指定位置從后向前搜索。 語法&#xff1a; indexOf() &#xff1a; stringObject.indexOf(searchvalue,fromi…

React進階—性能優化

React性能優化思路 軟件的性能優化思路就像生活中去看病&#xff0c;大致是這樣的&#xff1a; 使用工具來分析性能瓶頸&#xff08;找病根&#xff09;嘗試使用優化技巧解決這些問題&#xff08;服藥&#xff09;使用工具測試性能是否確實有提升&#xff08;療效確認&#xff…

內蒙古銀行銀行招聘計算機研究生,內蒙古銀行招聘公告

出國留學網考研報名資訊&#xff1a;內蒙古2015考研報考公告&#xff0c;希望仔細閱讀考研報名公告&#xff0c;及時進行報名&#xff0c;盡量避開報名高峰期!內蒙古2015考研報考公告一、關于報考點的的安排我區共設12個報考點&#xff1a;呼和浩特市招生考試管理中心、內蒙古大…

ubuntu 13.04 telnet 詳細配置

1. sudo vi /etc/xinetd.d/telnet并加入以下內容&#xff1a;# default: on# description: The telnet server serves telnet sessions; it uses \# unencrypted username/password pairs for authentication.service telnet{disable noflags REUSEsocket_type streamwait …

C++定義隱式轉換函數,將類轉換為內部的一個成員變量

C中單參數構造函數若不聲明為explict&#xff0c;在合適的場合可以產生隱式轉換&#xff1a;由成員變量類型轉換為類類型。 下面的代碼展示如何實現反向的轉換&#xff1a; Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/…

2015年百度面經

百度問的是開放性的問題&#xff0c;應該是為了考察你的綜合能力吧&#xff0c;問了兩個問題 一&#xff0c;html&css 涉及的內容 塊元素與行內元素&#xff0c;浮動&#xff0c;清除浮動 1&#xff0c;一個100px的容器&#xff0c;里面塞了一個空的div&#xff0c;這個di…

計算機網頁設計與制作論文,網頁設計與制作論文

二十一世紀是信息化的時代&#xff0c;通過互聯網&#xff0c;就能達到足不出戶便可了解世界的目的。為了加深對互聯網的了解&#xff0c;《網頁設計與制作》這門課的出現就成為了必然。1《網頁設計與制作》現狀問題分析(1)對課程不了解很多學生都有這個困惑&#xff0c;這門課…

mybatis中#{}和${}的區別

http://www.cnblogs.com/davidwang456/p/4929426.html轉載于:https://www.cnblogs.com/xtdxs/p/6666017.html

游標定位:Cursor類

關于 CursorCursor 是每行的集合。使用 moveToFirst() 定位第一行。你必須知道每一列的名稱。你必須知道每一列的數據類型。Cursor 是一個隨機的數據源。所有的數據都是通過下標取得。關于 Cursor 的重要方法&#xff1a;close() 關閉游標&#xff0c;釋放資源copyStringToBuf…

Supervised Descent Method and its Applications to Face Alignment

廣播說明&#xff1a; 進入深度學習時代&#xff0c;如下的方法已經失去可比性&#xff0c;且我們的代碼實現地很粗糙&#xff0c;如果堅持要用&#xff0c;推薦如下代碼 https://github.com/wanglin193/SupervisedDescentMethod &#xff08;看起來作者對sdm實現的不錯&…

導出Excel神器最終版

泛型列表導出Excel&#xff1a; 最近好多導出問題就整這么個玩意共享給大家public class Export{/// <summary>/// 泛型導出Excel/// </summary>/// <param name"strCaption">Excel文件中的標題</param>/// <param name"pList"…

國外計算機課程lab,計算機系統實驗之bomblab

今天剛剛驗收CSAPP實驗3&#xff0c;趁著余溫&#xff0c;記錄一下這個實驗&#xff0c;順便回顧下CSAPP課程的相關知識。實驗目的1.使用gdb工具反匯編出匯編代碼&#xff0c;結合c語言文件找到每個關卡的入口函數。然后分析匯編代碼&#xff0c;分析得到每一關的通關密碼。2.熟…

批量實現ssh免交互認證

因為要部署一批服務器&#xff0c;為了以后管理方便&#xff0c;要進行免密認證。一臺一臺做很費時&#xff0c;腳本又得手動輸密碼。于是上網搜了搜&#xff0c;發現一個非常簡單的免交互認證&#xff0c;不需要入密碼即可完成&#xff01;環境&#xff1a;centos 6.8 虛擬機V…

CSS兼容IE6,IE7,FF的技巧(COPY來的,還沒看)

一、CSS HACK 以下兩種方法幾乎能解決現今所有HACK.翻閱很多資料&#xff0c;已測試可以使用。 1, !important 隨著IE7對!important的支持, !important 方法現在只針對IE6的HACK.(注意寫法.記得該聲明位置需要提前.) PLAIN TEXT CSS: #wrapper { width: 100px!important; /* IE…

計算機復制粘貼教案,信息技術《文本的復制與移動》教案

一、教學內容分析本課是小學信息技術教材四年級下冊第十八課文本的復制與移動。是在學生掌握了文件夾的復制、移動&#xff0c;以及掌握了Word的啟動、退出&#xff0c;在Word中輸入文字并保存等內容之后的又一個知識點&#xff0c;學好這一課為學生以后學習文本的編輯與操作&a…

ajax基礎知識

AJAX 指異步JavaScript及XML&#xff08;Asynchronous JavaScript And XML&#xff09;運用ajax步驟&#xff1a;創建對象&#xff08;注意IE6兼容問題&#xff09;、連接服務器、發送請求、接收返回ajax的readystate屬性&#xff1a;0&#xff1a;表示未初始化1&#xff1a;表…