動態規劃練習題彙總segmentfault
題目描述
傳說中的九頭龍是一種特別貪吃的動物。雖然名字叫「九頭龍」,但這只是說它出生的時候有九個頭,而在成長的過程當中,它有時會長出不少的新頭,頭的總數會遠大於九,固然也會有舊頭因衰老而本身脫落。
有一天,有M個腦殼的九頭龍看到一棵長有N個果子的果樹,喜出望外,巴不得一口把它所有吃掉。但是必須照顧到每一個頭,所以它須要把N個果子分紅M組,每組至少有一個果子,讓每一個頭吃一組。
這M個腦殼中有一個最大,稱爲「大頭」,是衆頭之首,它要吃掉剛好K個果子,並且K個果子中理所固然地應該包括惟一的一個最大的果子。果子由N-1根樹枝鏈接起來,因爲果樹是一個總體,所以能夠從任意一個果子出發沿着樹枝「走到」任何一個其餘的果子。
對於每段樹枝,若是它所鏈接的兩個果子須要由不一樣的頭來吃掉,那麼兩個頭會共同把樹枝弄斷而把果子分開;若是這兩個果子是由同一個頭來吃掉,那麼這個頭會懶得把它弄斷而直接把果子連同樹枝一塊兒吃掉。固然,吃樹枝並非很舒服的,所以每段樹枝都有一個吃下去的「難受值」,而九頭龍的難受值就是全部頭吃掉的樹枝的「難受值」之和。
九頭龍但願它的「難受值」儘可能小,你能幫它算算嗎?
例如圖1所示的例子中,果樹包含8個果子,7段樹枝,各段樹枝的「難受值」標記在了樹枝的旁邊。九頭龍有兩個腦殼,大頭須要吃掉4個果子,其中必須包含最大的果子。即N=8,M=2,K=4:spa
輸入
N個果子依次編號1,2,...,N,且最大的果子的編號老是1。
果樹的形態,每行包含三個整數a (1<=a<=N),b (1<=b<=N),c (0<=c<=105),表示存在一段難受值爲c的樹枝鏈接果子a和果子b。如上圖中的 1,2,20; 1,3,4; 1,4,13; 2,5,10; 2,6,12; 3,7,15; 3,8,5blog
輸出
輸出一個整數,表示在知足「大頭」的要求的前提下,九頭龍的難受值的最小值。若是沒法知足要求,輸出-1。如上圖中的難受值爲4ip
1 思路get
2 拆分子問題it
3 計算class
4 代碼cli
5 時間複雜度im