演算法 機械人跳躍問題(二分)

2021-10-18 23:00:36 字數 1426 閱讀 3394

因為當向上走的時候,它會失去能量故e=e

−(h(

k+1)

−e

)e = e - (h(k+1)-e)

e=e−(h

(k+1

)−e)

,當向下走的時候,會增加能量e=e

+(e−

h(k+

1)

)e = e + (e - h(k+1))

e=e+(e

−h(k

+1))

故可以整理得到e=2

∗e−h

(k+1

)e = 2 * e - h(k+1)

e=2∗e−

h(k+

1)。因此我們可以考慮當e比所有建築都要高的時候每次e=e

+e−h

(k+1

)e = e + e - h(k+1)

e=e+e−

h(k+

1)都大於等於0因此e只會逐漸增大。因此我們可以推出當e在迴圈中能量大於陣列中的最大值時,結果一定不會小於0。

機械人正在玩乙個古老的基於dos的遊戲。

遊戲中有n+1座建築——從0到n編號,從左到右排列。

編號為0的建築高度為0個單位,編號為 i 的建築高度為h(i)個單位。

起初,機械人在編號為0的建築處。

每一步,它跳到下乙個(右邊)建築。

假設機械人在第k個建築,且它現在的能量值是e,下一步它將跳到第k+1個建築。

如果h(k+1)>e,那麼機械人就失去h(k+1)-e的能量值,否則它將得到e-h(k+1)的能量值。

遊戲目標是到達第n個建築,在這個過程中能量值不能為負數個單位。

現在的問題是機械人至少以多少能量值開始遊戲,才可以保證成功完成遊戲?

第一行輸入整數n。

第二行是n個空格分隔的整數,h(1),h(2),…,h(n)代表建築物的高度。

輸出乙個整數,表示所需的最少單位的初始能量值上取整後的結果。

1≤n,h(i)≤10^5,

#include

using

namespace std;

const

int n =

100010

;int h[n]

;int n;

bool

check

(long

long mid)

else

if(mid >=

100000)}

return

true;}

intmain()

int l =

0, r =

100000

;while

(l < r)

else

} cout << l << endl;

return0;

}

原題鏈結

二分 機械人跳躍問題

機械人正在玩乙個古老的基於dos的遊戲。遊戲中有n 1座建築 從0到n編號,從左到右排列。編號為0的建築高度為0個單位,編號為 i 的建築高度為h i 個單位。起初,機械人在編號為0的建築處。每一步,它跳到下乙個 右邊 建築。假設機械人在第k個建築,且它現在的能量值是e,下一步它將跳到第k 1個建築...

機械人跳躍問題

機械人正在玩乙個古老的基於dos的遊戲。遊戲中有n 1座建築 從0到n編號,從左到右排列。保證編號為0的建築高度為0個單位。編號為i的建築 i 1,n 的高度為hi個單位。起初,機械人在編號為0的建築處。每一步,它跳到下乙個 右邊 建築。假設機械人在第k個建築,且他現在的能量值是botenergy,...

機械人跳躍問題

機械人正在玩乙個古老的基於dos的遊戲。遊戲中有n 1座建築 從0到n編號,從左到右排列。編號為0的建築高度為0個單位,編號為 i 的建築高度為h i 個單位。起初,機械人在編號為0的建築處。每一步,它跳到下乙個 右邊 建築。假設機械人在第k個建築,且它現在的能量值是e,下一步它將跳到第k 1個建築...