聪明的木匠(优先队列,思维)
一位老木匠需要將一根長(zhǎng)的木棒切成N段。每段的長(zhǎng)度分別為L(zhǎng)1,L2,…,LN(1 <= L1,L2,…,LN <= 1000,且均為整數(shù))個(gè)長(zhǎng)度單位。我們認(rèn)為切割時(shí)僅在整數(shù)點(diǎn)處切且沒(méi)有木材損失。
木匠發(fā)現(xiàn),每一次切割花費(fèi)的體力與該木棒的長(zhǎng)度成正比,不妨設(shè)切割長(zhǎng)度為1的木棒花費(fèi)1單位體力。例如:若N=3,L1 = 3,L2 = 4,L3 = 5,則木棒原長(zhǎng)為12,木匠可以有多種切法,如:先將12切成3+9.,花費(fèi)12體力,再將9切成4+5,花費(fèi)9體力,一共花費(fèi)21體力;還可以先將12切成4+8,花費(fèi)12體力,再將8切成3+5,花費(fèi)8體力,一共花費(fèi)20體力。顯然,后者比前者更省體力。
那么,木匠至少要花費(fèi)多少體力才能完成切割任務(wù)呢?
Input
第1行:1個(gè)整數(shù)N(2 <= N <= 50000)
第2 - N + 1行:每行1個(gè)整數(shù)Li(1 <= Li <= 1000)。
Output
輸出最小的體力消耗。
Sample Input
3
3
4
5
Sample Output
19
又是一道stl的問(wèn)題,而且很考驗(yàn)思維。一開(kāi)始做這道題,就是單純的從大的開(kāi)始減,,只過(guò)了樣例。后來(lái)一想,就算是減下去的大的,也有可能大于另外的數(shù)的和,而且如果一開(kāi)始,從整體往下減,情況很復(fù)雜。我們倒過(guò)來(lái)想一下,如果我們將n段木頭拼接成一整根木頭,和題意是一樣的。而且只把小的加起來(lái)就好了。并且加起來(lái)的小的也要重新加入到優(yōu)先隊(duì)列中。
代碼如下:
stl真的很有用。。
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的聪明的木匠(优先队列,思维)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: N的倍数(抽屉原理)
- 下一篇: find the nth digit(数