免費餡餅 移動dp

2022-02-01 20:15:54 字數 1796 閱讀 6529

serkoi最新推出了一種叫做「免費餡餅」的遊戲:

遊戲在乙個舞台上進行。舞台的寬度為 \(w\) 格,天幕的高度為 \(h\) 格,遊戲者佔一格。

開始時遊戲者站在舞台的正**,手裡拿著乙個托盤。下圖為天幕的高度為 \(4\) 格時某乙個時刻遊戲者接餡餅的情景。

遊戲開始後,從舞台天幕頂端的格仔中不斷出現餡餅並垂直下落。遊戲者左右移動去接餡餅。遊戲者每秒可以向左或向右移動一格或兩格,也可以站在原地不動。

餡餅有很多種,遊戲者事先根據自己的口味,對各種餡餅依次打了分。同時,在 \(3-308\) 電腦的遙控下,各種餡餅下落的速度也是不一樣的,下落速度以格/秒為單位。

當餡餅在某一秒末恰好到達遊戲者所在的格仔中,遊戲者就收集到了這塊餡餅。

寫乙個程式,幫助我們的遊戲者收集餡餅,使得所收集餡餅的分數之和最大。

輸入檔案的第一行是用空格隔開的兩個正整數,分別給出了舞台的寬度 \(w\) ( \(1\) 到 \(99\) 之間的奇數)和高度 \(h\) ( \(1\) 到 \(100\) 之間的整數)。

接下來依餡餅的初始下落時間順序給出了所有餡餅的資訊。每一行給出了一塊餡餅的資訊。由四個正整數組成,分別表示了餡餅的初始下落時刻( \(0\) 到 \(1000\) 秒),水平位置、下落速度( \(1\) 到 \(100\) )以及分值。遊戲開始時刻為 \(0\) 。從 \(1\) 開始自左向右依次對水平方向的每格編號。

輸入檔案中同一行相鄰兩項之間用乙個或多個空格隔開。

輸出檔案的第一行給出了乙個正整數,表示你的程式所收集的最大分數之和。

3 3

0 1 2 5

0 2 1 3

1 2 1 3

1 3 1 4

12
餡餅個數

移動 \(dp\) ,重在移動,但是兩個物體都移動處理起來還是很麻煩的,所以定餡餅不動,讓人動,去接餡餅。

但是要注意的是餡餅在第 \(i\) 秒到第 \(i+1\) 秒的降落過程中,不可被接到,相當於閃現,在過程中不可選中。

所以只有在高度能夠被速度整除的時候,才可以被接到,所以有的餡餅可以除去,不考慮。

設 \(f[i][j]\) 為在第 \(i\) 時刻,小人在第 \(j\) 的座標,能夠接到的最大值。

用 \(k\) 列舉小人移動的距離 \((-2、-1、0、1、2)\) ,動態轉移方程:

\(f[i][j]=min(f[i][j],f[i-1][j+k]+a[i][j])\)

#include using namespace std;

const int maxn=2500+50;

int w,h;

int dp[maxn][maxn];

int maxtime;

int dx[5]=;

struct nodee[maxn];

int cala(int t,int now)

return ans;

}int main()

}if(tot==1)

if(w==1)

}printf("%d\n",sum);

return 0;

}for(int i=1;i<=tot;i++)

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

}

printf("%d\n",dp[0][w/2+1]);

return 0;

}

免費餡餅 (dp)

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

免費餡餅(DP)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不 掉,就掉落在他身旁的10公尺範圍內。餡餅如果掉在了地上當然就不能吃了,所以gamebo...

免費餡餅 (dp)

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