洛谷 1174 打磚塊

2022-05-16 01:19:10 字數 1540 閱讀 6579

小紅很喜歡玩乙個叫打磚塊的遊戲,這個遊戲的規則如下:

在剛開始的時候,有n×m列的磚塊,小紅有k發子彈。小紅每次可以用一發子彈,打碎某一列當前處於這一列最下面的那塊磚,並且得到相應的得分。(如圖所示)

某些磚塊在打碎以後,還可能將得到一發子彈的獎勵。最後當所有的磚塊都打碎了,或者小紅沒有子彈了,遊戲結束。

小紅在遊戲開始之前,就已經知道每一塊磚在打碎以後的得分,並且知道能不能得到一發獎勵的子彈。小紅想知道在這次遊戲中她可能的最大得分,可是這個問題對於她來說太難了,你能幫幫她嗎?

輸入格式:

第一行有3個正整數,n,m,k。表示開始的時候,有n×m 列的磚塊,小紅有k發子彈。

接下來有n行,每行的格式如下:

f1​c1​f2​c2​f3​c3​……fm​cm​

其中fi​為正整數,表示這一行的第ii列的磚,在打碎以後的得分。ci​為乙個字元,只有兩種可能,y或者n。y表示有一發獎勵的子彈,n表示沒有。

所有的數與字元之間用乙個空格隔開,行末沒有多餘的空格。

輸出格式:

僅乙個正整數,表示最大的得分。

輸入樣例#1: 複製

3 4 2

9 n 5 n 1 n 8 n

5 n 5 y 5 n 5 n

6 n 2 n 4 n 3 n

輸出樣例#1: 複製

13
對於20%的資料,滿足1≤n,m≤5,1≤k≤10,所有的字元c都為n

對於50%的資料,滿足1≤n,m≤200,1≤k≤200,所有的字元c都為n

對於100%的資料,滿足1≤n,m≤200,1≤k≤200,字元c可能為y

對於100%的資料,所有的f值滿足1≤f≤10000

還是看題解理解到了這道題轉移的巧妙。

這道題精髓實際上在預處理上面,預處理出每一列用多少子彈能夠打到的分數,同時要分別處理最後一顆子彈打在當前列和沒有的情況。因為當子彈不夠時,可以選擇先去後面的列打,獲得了子彈後再返回來打當前列。

這裡兩個陣列中y和n分別表示最後一顆子彈在當前列和不在。

#includeusing

namespace

std;

intn, m, k;

int dpy[205][205], dpn[205][205], fy[205][205], fn[205][205

];int a[205][205], b[205][205

];int

main()

for(int j = 1; j <= m; j ++) }}

for(int i = 1; i <= m; i ++)

for(int j = 0; j <= k; j ++)//

前i列共用的子彈

for(int q = 0; q <= n && q <= j; q ++)

printf("%d

", fy[m][k]);

return0;

}

洛谷 P1174 打磚塊

題目鏈結 題解 一道dp好題。include include using namespace std int a 210 210 s1 210 210 s2 210 210 dp1 210 210 dp2 210 210 n,m,k bool vis 210 210 int main for int...

洛谷 1437 敲磚塊 DP

題意 中文題 題解 先旋轉三角形。然後要打掉第i行第j個,就要打掉第i行第j 1個和第i 1行第j 1個。所以到第i,j元素時,對於第i行,前j都被打掉,後面的都沒被打掉。但是對於第i 1行,前j 1一定被打掉,但後面的可以被打掉,也可以不打掉。所以狀態轉移就很好寫了。include include...

android 打磚塊遊戲

想編乙個自己鬧鐘程式,決定學習一下android開發,後來由於某些私人原因吧,緊急的編了乙個程式,突然覺得已經有了打磚塊的程式的雛形,遂決定編個打磚塊吧,放在網上旨在和大家交流。也算是對自己做過的東西的乙個紀念。直接貼 吧,有問題歡迎一起交流。assert中的.cq檔案是關的編輯檔案,可以自己編輯關...