HDU 1176(免費餡餅)(dp,數塔)

2021-09-26 07:29:06 字數 730 閱讀 2629

天上掉餡餅了,告訴你第t秒時會在哪些位置掉落餡餅,每一秒你可以移動一格,如果你的初始位置是5,餡餅掉落範圍是[0,10],你只能收集你所在的位置或者是你左右位置的餡餅,問最大收集的餡餅的數量是多少。

我們反向考慮從[0,10]之內的某個位置在最後一秒開始收集,讓時間倒流,最後當時間為0你在初始位置5時的最大數目,跟題目是等價的。

自下向上收集我們自然的想到數塔,因此我們建立二位陣列dp[t][pos],表示在第t秒時在pos位置能夠收集到的最大的餡餅數量。

那麼我們從最後一秒倒著向上dp,也就實現了時間的倒流。最後的答案也就是dp[0][5];

如果我們初始化dp[t][pos]是第t秒pos位置的餡餅數量,那麼我們有狀態轉移方程:

dp[t][pos] += max(dp[t + 1][pos], dp[t + 1][pos -1], dp[t + 1][pos+ 1])(當然0於10這兩個位置需要特殊處理);

#include using namespace std;

const int maxn = 10 + 5;

const int maxx = 100000 + 10;

int dp[maxx][maxn];

int main()

for(int i = len - 1; i >= 0; i--)

cout << dp[0][5] << endl;

}return 0;

}

HDU 1176 數塔DP 免費餡餅

題意 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10公尺範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的揹包去接。但由於小徑兩側都不能站人,所以他只能在小...

HDU 1176 免費餡餅 數塔

problem description 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10公尺範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的揹包去接。但由於...

HDU 1176 免費餡餅 (DP 數塔問題)

include include include include using namespace std const int maxn 100005 int n int dp 15 maxn int arr 15 maxn int tmax intmain for int i tmax 1 i 0 i...