動態規劃 能量蘋果問題

2022-04-10 00:47:26 字數 1564 閱讀 3536

maximum energy

time limit:1000ms  memory limit:32768k

description:

input:

output:

the maximum energy bob can increase

sample input:

87 2 1 8 4 3 5 6

sample output:

17問題翻譯:

現有n(1<=n<=150,000)個蘋果組成的序列,每個蘋果有乙個能量值v( 1<=v<=500)。鮑勃依次訪問這些蘋果,沒次遇到乙個蘋果,鮑勃有兩種選擇,吃掉它或忽略它。當鮑勃第奇數次吃蘋果時,他的能量增加v,當第偶數次吃蘋果時,他的能量值減v。初始狀態鮑勃的能量值為0,請計算鮑勃可能得到的最大能量值。

輸出:

可能獲得的最大能量值

輸入例子:

87 2 1 8 4 3 5 6

輸出例子:

17首先分析問題解的性質。面對這一串蘋果,鮑勃的選擇很多,每遇到乙個蘋果,都可以選擇「吃」或「不吃」。所有可能的情況有2n, 因此遍歷所有的情況是不現實的。

由於鮑勃的目的是獲取最大能量,所以鮑勃吃的最後乙個蘋果,一定是增加能量,即第奇數次吃蘋果。若鮑勃最後吃了偶數個蘋果,則可以通過忽略最後吃的那個蘋果,獲得更大的能量狀態,可以證明上述推斷。

再考慮整個問題是否能被分解為若干子問題。當鮑勃已經處理了n-1個蘋果,遇到最後乙個蘋果時,可以「吃」或「不吃",這依賴於在處理完n-1個蘋果後鮑勃的狀態。鮑勃可能有兩種狀態,已經吃了奇數個蘋果,已經吃了偶數個蘋果。當已經吃了奇數個蘋果,如果再選擇「吃」,則會降低能量,因此在n-1階段,若鮑勃的狀態為奇數,則會選擇「不吃」。同樣的思路,可以證明若在n-1階段鮑勃的狀態為偶數,他會選擇"吃"。

定義f(lx)為處理了蘋果序列l的前x個蘋果後,可以得到的最大能量。根據上述分析,f(lx)依賴於三個值,處理完x-1個蘋果且吃了偶數個蘋果時的最大能量值,vx

,處理完x-1個蘋果且吃了偶數個蘋果時的最大能量值。根據一開始的分析,f(lx-1)必定吃了奇數個蘋果。再定義函式g(lx)表示處理完x個蘋果,且吃了偶數個時的最大能量值。至此,可以寫出遞迴公式。g(lx)的遞迴關係與f(lx) 類似。

f(lx) = max

g(lx) = max  

f(l0)=0

g(l0)=0

可利用動態規劃求解。

以此輸入為例。

87 2 1 8 4 3 5 612

3456

78vx7 21

8435

6f(lx)77

7141414

1617

g(lx)05

661011

1111

可以得到解f(l8)=17

(動態規劃)能量項鍊

題目描述 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠...

放蘋果 動態規劃

題目描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分發 5,1,1和1,1,5是同一種方法 輸入輸出格式 輸入格式 第一行是測試資料的數目t 0 t 20 以下每行均包括二個整數m和n,以空格分開。1 m,n 10 輸出格式 對輸入的每組資料m和n,用一行輸出相...

放蘋果(動態規劃)

題目描述 把 m 個同樣的蘋果放在 n 個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?注意 5 1 1 和 1 5 1 是同一種分法,即順序無關。輸入包含多組資料。每組資料報含兩個正整數 m和n 1 m,n 20 對應每組資料,輸出乙個整數k,表示有k種不同的分法。示例1 7 3 8...