小g正在玩一款遊戲,遊戲地圖上有n個點(1到n編號),這些點之間有m條無向邊(沒有重邊)。一次系統重新整理會在某個時刻在某點重新整理出一定數量的怪物,系統重新整理出來的怪物只會存在1秒,下一秒就會消失。如果那個時刻小g正好在那個點,那麼小g可以秒殺(秒殺所用時間忽略不計,下同)這個點上的所有怪物。
另外,小g還有b次放大招的機會,每次放大招可以秒殺當前點及與其直接相鄰的點上的所有怪物。大招有5秒的冷卻時間,也就是說每次放大招後要經過5秒才能再次放大招(假設在第1秒時發了大招,那下一次發大招的最早時間是第6秒)。
小g可以從任意點開始。系統時間從第1秒開始。他想要知道t秒內他最多可以殺掉多少只怪物。
輸入
第一行包含5個整數n、m、t、k、b。其中k表示有k次系統重新整理。
接下來是m行,每行有3個整數u、v、t(1≤u≤n,1≤v≤n,u≠v,1≤t≤10)表示從u走到v或者從v走到u需要花費t秒的時間。
然後是k行,每行有3個整數s、p、c(1≤s≤50,1≤p≤n,1≤c≤100)表示第s秒在p點會重新整理出c個怪物。
輸出
輸出只有一行,包含乙個整數,表示小g在t秒內最多可以殺掉多少只怪物。
輸入樣例
4 3 5 9 1
1 2 2
2 3 1
2 4 1
1 1 4
2 1 5
3 1 1
3 2 1
5 3 1
5 4 2
4 2 2
4 3 3
4 4 4
輸出樣例
說明
【輸入輸出樣例解釋】 第1秒,小g在點1,殺掉4只怪物。 小g停留在點1。 第2秒,小g在點1,殺掉5只怪物。 小g從點1走向點2。 第3秒,小g還在邊上,既殺不了點1和點2的怪物,也不能放大招。 第4秒,小g到達點2,並在點2放大招,一下子殺掉9只怪物。 小g從點2走向點4。 第5秒,小g在點4,殺掉2只怪物。 總共4+5+9+2=20只怪物。 【資料說明】 對於40%的資料,1≤n≤10,1≤t≤15,0≤b≤1。 對於另20%的資料,b=0。 對於100%的資料,1≤n≤50,0≤m≤(n-1)*n/2,1≤t≤50,0≤k≤1000,0≤b≤5。
很簡單的一道動態規劃題。f[i][j][c][d]表示第i秒在第j個點的時候,大招還有c秒,還可以放d次大招。狀態轉移方程看程式
#includeusing namespace std;
const int n=55;
long long f[n+200][n][n][n];
long long a[n][n],w[n][n];
long long n,m,t,r,b,i,j,c,d,k,l,ans;
long long maxx(long long x,long long y)
int main()
for (i=1;i<=r;i++)
for (i=1;i<=t;i++)
for (j=1;j<=n;j++)
for (c=0;c<=5;c++)
for (d=0;d<=b;d++)
if (f[i][j][c][d]>=0)
l=f[i][j][c][d]+w[i][j];
if (l>ans)
ans=l;
if (f[i+1][j][maxx(c-1,0)][d]0)
if (f[i+a[j][k]][k][maxx(c-a[j][k],0)][d]f[i+a[j][k]][k][maxx(c-a[j][k],0)][d]=l;
}cout<}
四維陣列 遊戲
題目描述 小g正在玩一款遊戲,遊戲地圖上有n個點 1到n編號 這些點之間有m條無向邊 沒有重邊 一次系統重新整理會在某個時刻在某點重新整理出一定數量的怪物,系統重新整理出來的怪物只會存在1秒,下一秒就會消失。如果那個時刻小g正好在那個點,那麼小g可以秒殺 秒殺所用時間忽略不計,下同 這個點上的所有怪...
魔戒(BFS 四維陣列)
description 藍色空間號和萬有引力號進入了四維水窪,發現了四維物體 魔戒。這裡我們把飛船和魔戒都抽象為四維空間中的乙個點,分別標為 s 和 e 空間中可能存在障礙物,標為 其他為可以通過的位置。現在他們想要盡快到達魔戒進行探索,你能幫他們算出最小時間是最少嗎?我們認為飛船每秒只能沿某個座標...
php 四維陣列 PHP 多維陣列
php 兩維陣列 兩維陣列是陣列的陣列 三維陣列是陣列的陣列的陣列 首先,讓我們看看下面的 品牌庫存 銷量volvo bmwsaab land rover 我們能夠在兩維陣列中儲存上表中的資料,就像這樣 cars array array volvo 22,18 array bmw 15,13 arr...