天上掉餡餅了,告訴你第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...