問題:積木
問題 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 座的大巴每輛租...