問題 D 死神君

2021-09-25 21:02:26 字數 942 閱讀 5197

演算法如下:

如果把每乙個點在xy軸上連成線,會發現乙個折線圖,可以發現,在折線圖之中,如果在折線圖中找到任何乙個極大值(波峰),

然後將它與旁邊兩個點中比較大的那乙個結合,不會影響這個極大值左邊和右邊的其他節點的結合的最大可能值。

因此,上述可以實現提供貪心演算法。該貪心演算法可以通過stack實現。

1.初始條件:

stack中元素從棧低到棧頂為單調不遞減

2.迴圈不變式:

讀入乙個元素buf,

1)如果這個元素大於stack頂部元素(stack元素的最大值)

,就把這個元素壓入棧.

(顯然不會影響stack單調性)

2)否則,pop出棧頂元素,最大結合計數值增加((出棧之後的棧的棧頂)和buf的最大值)。(相當於極大值和左邊/右邊的元素中大的相結合)(也不會影響單調性)

3)然後返回第一步。

3.終止條件:

當全部元素被壓入棧(或者被結合除去了),就可以終止迴圈了

4.處理最後的資料:

此時把棧中元素相當於單調遞增的折線,組合出最大費用非常簡單。

#include

using

namespace std;

intmain()

st.push

(buf);}

while

(st.

size()

>2)

cout << cnt << endl;

}return0;

}

不死神兔問題

規則 a 從第三項開始,每一項都是前面兩項之和 b 而且說明前面的兩項是已知的 c 陣列實現 d 變數的變化實現 實現 如下 以20個月為例,三種方法實現 public class resursiondemo2 system.out.println 第20個月不死神兔的個數是 arr 19 syst...

遞迴 不死神兔和啤酒問題

本次針對上次遞迴遺留問題編寫出對於 當然,解決方案很多,只供參考.有一對兔子,從出生後第三個月起每月都生一對兔子,小兔子3個月後又生一對兔子,加入兔子都不死,問第20個月後兔子對數是多少?這道題依然用遞迴的方法解決 public static int arithmetic int number el...

問題 D 筷子

題目描述 a先生有很多雙筷子。確切的說應該是很多根,因為筷子的長度不一,很難判斷出哪兩根是一雙的。這天,a先生家裡來了k個客人,a先生留下他們吃晚飯。加上a先生,a夫人和他們的孩子小a,共k 3個人。每人需要用一雙筷子。a先生只好清理了一下筷子,共n根,長度為t1,t2,t3,tn.現在他想用這些筷...