(中石油六)問題E 積木(dp法)

2021-10-01 07:03:54 字數 1237 閱讀 8618

問題:積木

問題 e: 積木

時間限制: 1 sec 記憶體限制: 128 mb

題目描述

喬治喜歡玩積木。目前他有n塊積木,編號為1到n。所有積木的高度都是正整數,第i塊積木高度是h[i]。喬治喜歡用積木堆起盡可能高的塔。他堆積木的過程中,只需要同時滿足如下三個規則:

(1)積木必須堆放在同乙個列中,乙個搭在另乙個上面。最終的塔的高度就是構成塔的所有積木的高度總和。

(2)塔中使用的積木的編號從底部到頂部必須是遞增的。換句話說,每當喬治把積木x放在積木y的上面,必須要滿足編號x大於編號y。

(3)喬治永遠不會把高度是偶數的積木放置在高度是奇數的積木上面。

在滿足上面的前提下,塔最高是多高?

輸入多組測試資料。

第一行,乙個整數g,表示有g組測試資料。1<=g<=5。每組測試資料格式如下:

第1行,乙個正整數n。2<=n<=50。

第2行,n個正整數,空格分開,第i個整數就是編號為i的積木的高度h[i],1<=h[i]<=50。

輸出共g行,每行乙個正整數。

樣例輸入 copy52

4 72

7 4171

4748 1 50 1 50 1 48

樣例輸出 copy117

74196提示

對於第5組測試資料的解釋:

從底部往頂部,依次選擇第1、第3、第5、第7塊積木,這樣塔的高度是:48+50+50+48=196。

題目和dp入門題金礦模型差不多的思路,用遞迴+情況討論就可以了。

最近剛開始玩位運算子,難免有點小疏漏,如我原本的**中的

a[t]&1==0是錯誤的,除錯之後才發現這個錯誤。具體改進看下面吧。

#include

using

namespace std;

typedef

long

long ll;

int n,a[52]

;intdp(

int t,

int flag)

else

return a[n];}

else

if(flag==0)

else

if(flag==1)

else temp=

dp(t+1,

1)+a[t];}

return temp;

}int

main()

}

(中石油五)問題 E 方格取數(暴搜)

題目描述 在 n 行 m 列的方格矩陣中,每個方格都包含乙個數字。小明可以從任意方格出發開始移動。每次移動可以移到與當前方格有一條邊相鄰的方格 即向上 下 左或右方向移動 1 格,且不能移出邊界 除此之外,你移動到的方格中的數字必須比當前方格中的數字更大。請你幫助小明程式設計規劃移動路徑,使路徑上經...

(中石油十)問題 L K(dp入門,水題)

錢幣兌換問題的小變形 問題 l k 題目描述 小 z 整理完房間時間已經不早了,簡單洗漱一下就 睡覺了,自從進入初三後小 z 已經有很久沒有做夢了,不做夢的主要原因是學習強度太大加上睡得較晚,一旦睡著就睡 得特別沉,沉到沒有夢的地步。今晚小 z 的大腦皮層特別興奮,小 z 回到賓館立刻開啟筆記本開始...

中石油新生賽第八場 問題 A 春遊

題目描述 小 就讀的cz 中學今年又取得了小高考的空前佳績,全校師生都很開心,於是大家希望找個地方去春遊,在廣泛徵集了全校師生的意見後,最終決定前往嬉戲谷遊玩一天。出行方案為租用大巴,可供租用的大巴有兩種,一種是49 座的,一種是33 座的,49 座的大巴每輛租金為3300 元,33 座的大巴每輛租...