貪心法入門

算法簡(jiǎn)介

   所謂貪心算法是指轧房,在對(duì)問(wèn)題求解時(shí)究西,總是做出在當(dāng)前看來(lái)是最好的選擇媒怯。也就是說(shuō)边酒,不從整體最優(yōu)上加以考慮僚碎,他所做出的僅是在某種意義上的局部最優(yōu)解揽涮。
   貪心算法沒(méi)有固定的算法框架抠藕,算法設(shè)計(jì)的關(guān)鍵是貪心策略的選擇。必須注意的是蒋困,貪心算法不是對(duì)所有問(wèn)題都能得到整體最優(yōu)解盾似,選擇的貪心策略必須具備無(wú)后效性,即某個(gè)狀態(tài)以后的過(guò)程不會(huì)影響以前的狀態(tài)雪标,只與當(dāng)前狀態(tài)有關(guān)零院。
  所以對(duì)所采用的貪心策略一定要仔細(xì)分析其是否滿足無(wú)后效性。

題目鏈接

SGU-548 Dragons and Princesses

題意

一個(gè)經(jīng)典的以龍-騎士-公主的為背景的題目:
有n(2e5數(shù)量級(jí))個(gè)格子排成一行村刨,第一個(gè)格子里只有騎士告抄,最后一個(gè)格子里只有目標(biāo)公主,其它格子里有龍或其它公主嵌牺,每個(gè)公主有對(duì)應(yīng)的一個(gè)漂亮值打洼,每條龍對(duì)應(yīng)一個(gè)財(cái)富值龄糊,騎士從第一個(gè)格子出發(fā),一直走到最后一個(gè)格子救出目標(biāo)公主募疮,有兩點(diǎn)需要注意:

  1. 如果格子里是龍炫惩,那么騎士可以選擇殺死或者不殺死龍,如果殺死阿浓,可以得到這條龍的財(cái)富值他嚷;
  2. 如果格子里是公主(無(wú)論是不是目標(biāo)公主),只要騎士當(dāng)前殺死的龍的數(shù)量>=當(dāng)前公主的漂亮值搔扁,就可以娶她爸舒,而且必須娶,然后結(jié)束行程稿蹲;
    問(wèn)騎士是否能娶到目標(biāo)公主扭勉,如果能,求出能積累的最大的財(cái)富值苛聘,并給出方案涂炎。

解法

這題可以用貪心法來(lái)做:

  1. 在遇到龍時(shí),我們先假設(shè)將它們都標(biāo)記成要?dú)⑺溃?/li>
  2. 在遇到[2,n-1]中的公主時(shí)设哗,如果當(dāng)前標(biāo)記成要?dú)⑺赖凝垟?shù)量太多了唱捣,那我們肯定想辦法挑出幾條已經(jīng)標(biāo)記成殺死的龍,標(biāo)記成不殺网梢。那么怎么挑選呢震缭?顯然要選取其中財(cái)富值最小的那幾條;

這樣做的原因如下:
每條龍有兩個(gè)屬性:財(cái)富值战虏、對(duì)騎士所殺的龍的數(shù)量的貢獻(xiàn)值拣宰;每條龍的貢獻(xiàn)值都是1,而目標(biāo)是要讓財(cái)富值盡量多烦感,所以巡社,要放棄殺死相同數(shù)量的龍的前提下,肯定會(huì)選擇放棄財(cái)富值小的手趣;
如何在當(dāng)前標(biāo)記成要?dú)⑺赖凝堉姓页鲐?cái)富值最小的呢晌该?這時(shí)候就可以借助堆(大部分操作復(fù)雜度都是lgn)了,這里要注意的是,c++里的priority_queue默認(rèn)是最大堆绿渣,而java里的PriorityQueue默認(rèn)是最小堆朝群,所以在重載<號(hào)或者實(shí)現(xiàn)Comparable方法的時(shí)候要注意不要弄反了。

核心代碼

for (int i = 2; i <= n; ++i) {
    String cmd = in.next();
    int curCoins = in.nextInt();
    if (cmd.equals("d")) {
        dragons.add(new Dragon(i, curCoins));
        coinsGet += curCoins;
    } else {
        if (i < n) {
            while (!dragons.isEmpty() && dragons.size() >= curCoins) {
                Dragon dragon = dragons.poll();
                coinsGet -= dragon.getCoins();
            }
        } else {
            getLastPrincess = dragons.size() >= curCoins;
        }
    }
}

完整代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末中符,一起剝皮案震驚了整個(gè)濱河市潜圃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舟茶,老刑警劉巖谭期,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堵第,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡隧出,警方通過(guò)查閱死者的電腦和手機(jī)踏志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胀瞪,“玉大人针余,你說(shuō)我怎么就攤上這事∑嗟” “怎么了圆雁?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帆谍。 經(jīng)常有香客問(wèn)我伪朽,道長(zhǎng),這世上最難降的妖魔是什么汛蝙? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任烈涮,我火速辦了婚禮,結(jié)果婚禮上窖剑,老公的妹妹穿的比我還像新娘坚洽。我一直安慰自己,他們只是感情好西土,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布讶舰。 她就那樣靜靜地躺著,像睡著了一般需了。 火紅的嫁衣襯著肌膚如雪绘雁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天援所,我揣著相機(jī)與錄音,去河邊找鬼欣除。 笑死住拭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的历帚。 我是一名探鬼主播滔岳,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挽牢!你這毒婦竟也來(lái)了谱煤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤禽拔,失蹤者是張志新(化名)和其女友劉穎刘离,沒(méi)想到半個(gè)月后室叉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫惕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年茧痕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恼除。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踪旷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豁辉,到底是詐尸還是另有隱情令野,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布徽级,位于F島的核電站气破,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灰追。R本人自食惡果不足惜堵幽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弹澎。 院中可真熱鬧朴下,春花似錦、人聲如沸苦蒿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佩迟。三九已至团滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間报强,已是汗流浹背灸姊。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秉溉,地道東北人力惯。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像召嘶,于是被迫代替她去往敵國(guó)和親父晶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 這是一片新開(kāi)發(fā)的住宅小區(qū)弄跌。秀子站在空曠的高樓上甲喝,向四周望去,前面不遠(yuǎn)處是另一棟和她住的這一棟一樣高铛只,款式一樣的樓房...
    野草凝香閱讀 2,167評(píng)論 0 1
  • 綠杉園小學(xué) 三年級(jí)四班 肖童
    趣童閱讀 185評(píng)論 0 0
  • 投射我兒注意面部衛(wèi)生埠胖,不用手?jǐn)D糠溜、摳痘痘,結(jié)合中西醫(yī)的治療押袍,這個(gè)月的青春痘不見(jiàn)了诵冒,面部也光滑如初。 投射我兒開(kāi)始...
    花開(kāi)生兩面閱讀 95評(píng)論 0 0
  • 電話車險(xiǎn)豹芯、車險(xiǎn)代理給大家的印象就是方便、便宜驱敲,但是一旦留了電話铁蹈,就會(huì)接到很多推銷車險(xiǎn)的電話。電話車險(xiǎn)方便快捷众眨,而與...
    fc41fb680218閱讀 1,176評(píng)論 0 3