基礎練習 貪心 tyvj1373 石子採集題解

2021-07-06 05:32:49 字數 1905 閱讀 4808

此題改編自poj1042

p1373石子採集

某一天,小a正在備戰noip(焦頭爛額ing~)。他正對著螢幕發呆時,收到了陌生人發來的一封郵件,「恭喜您,獲得了參加rp++一日遊的機會,時間定在***日8:30,屆時將會有很多oi界的神牛(sdzh~..),希望您能準時參加。」小a心裡有些懷疑,但如此狂得rp的機會怎能輕易錯過(大不了**),於是小a決定去參加……

小a一早就來到了活動地點,希望能見一見傳說中的神牛,但發現到場的人裡沒有乙個認識的。過了一會兒,他們每個人都收到了組織者的一封信。小a開啟一看,只見上面寫著:「你需要獨自闖過四關,才能得到rp大禮包。現在,請你完成第一項任務。

你需要在標號為1..n的山頭上採彩色的石頭,一開始是從1號山頭出發,每次只能從乙個山頭移動到相鄰的下乙個山頭,花費的時間將會給出。如果有多種可行的選擇,你需要選標號盡可能靠前的山頭。每個山頭一開始可以採fi個彩色石頭,採一次會花5分鐘,每採一次能採的石頭會減少di個(例如你在第j號山頭採到fj個石頭,下一次你還在該山頭採,則這一次能採fj-dj個石頭),你可以在任意乙個山頭停止。在給定的時間裡,你需要採得盡可能多的石頭。」

第一行為n(n<=1000),下面有n行空格。

接下來有多組資料(不多於500組),對於每一組:

一行為乙個非負整數n(n<=25);

一行為乙個非負整數h(h<=16),代表給定的時間(單位為小時);

一行為n個非負整數fi;

一行為n個非負整數di;

一行為n-1個非負整數ti(ti表示從i號山頭到i+1號所要花費的時間,單位為5分鐘,0 < ti <=192;n為1時你需要忽略掉本行的資料)。

……當n=0時輸入結束。

對於每一組資料,輸出如下:

第一行為n個實數(保留兩位小數),代表小a在每個山頭所花的時間,兩兩之間用乙個空格隔開(單位:小時);

第二行乙個數輸出石頭的最大數量;

第三行輸出一空行。 

10 1 

2 5 

0

0.75 0.08 

31 

第乙個5分鐘在山頭1上,採到10個石子;    第二個5分鐘在山頭1上,採到10-2=8個石子;    ......      這樣在山頭1採到10+8+6+4+2=30個石子,用時25分鐘;到山頭2用時2*5分鐘;在山頭2採到1個石子用時5分鐘。    而題目中有要求,故剩餘的60-25-2*5-5=20分鐘要在山頭1呆著:即前(25+20)/60小時要在山頭1;後5/60小時要在山頭2;共採石子31個。

這道題目我並沒有寫,是比賽的第一題···然而樣例被學長們捉弄的稀里糊塗···

在這裡寫一下簡單的方法吧:

我們首先限定要走到哪個山頭。顯然只是單向走一次是最優的方案,往回走只會浪費時間。用best[i]表示確定走到第i個山頭停止的最優解,這樣對於每個best,用在路上的時間就確定了。之後我們求出剩下採石子的時間,貪心每次取最大即可。

這麼說不好理解,舉個例子

假設我們現在要求走到山頭三德最優解,有十二個單位時間,從一到二和從二到三總共耗費三個時間,那麼現在我們還有九個時間用來採石子。

現在三個山頭的第一次可採石子分別為90,70,60,顯然我們選擇90,此時第乙個山頭的90變成了40,因此第二次選70,之後70變成50,於是我們第三次選60……以此類推。我們貪心選擇的順序是這樣,實際採石子時,要先把第乙個山頭取完我們計算的再去取第二個山頭的,等等。

這道題目更複雜,如果有多解,要盡量把時間放在第乙個山頭上。只需要在貪心時遇到多種可行解優先選擇靠前的山頭即可。

還有乙個坑點,就是這道題目資料卡讀入···什麼意思,讀入的時候讀夠了必要的就換行或者停止,後面會有多餘資料···會一直讓你讀不完···

基礎練習 完美的代價(貪心)

description 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md ma...

貪心演算法 藍橋杯基礎練習Huffman樹

貪心演算法 所謂 貪心演算法 是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說。不從整體上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解 是否是全域性最優,需要證明 例如 藍橋杯 基礎練習huffman樹 問題描述 huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huff...

藍橋杯 基礎練習VIP 完美的代價 貪心

題目描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...