故事的起源不加贅述,那23個路口。
單刀直入,我直接說題的意思。
蚊子和瘋子在做一件事,就是他們要在茫茫的大街上找乙個出發點,然後從出發點開始,經過上下左右23次拐彎,到達乙個他們也不知道的地方。
老城的街道排列的十分有規律,於是瘋子和蚊子把老城的街道排布畫在了一張地圖上。地圖上每乙個點代表乙個地方,而這個地方有一定的憧憬值,瘋子希望可以帶蚊子走過的二十三個路口的憧憬值總和是所有方案中最大的。
現在我們讀入乙個矩陣,如果此點為0,則這個點為起點,如果此點為-1,則這個點為障礙點,否則這個數代表憧憬值。注意起點和障礙點是沒有憧憬值的,起點只有開始的時候可以達到,不可以再回來。而障礙點根本就不可以走過。這樣一來,請你選擇合適的路線,使走完23個路口後得到最大的憧憬值,有憧憬值的點可以重複進出,每次可以選擇四個方向,上下左右。起點為第0個路口
第1行兩個整數 n,m (茫茫大街的長和寬)
第2行到第m+1行,每行n個整數\(a_\)(第i行第j個地點的憧憬值)
乙個整數sum (可以得到的最大憧憬值)
\(\texttt\)
4 41 1 1 1
1 1 0 1
1 1 1 1
1 1 1 1
\(\texttt\)
23於30%的資料,\(n,m \leqslant 50\)
0dp。f[i][j][k]表示第k步走到(i,j)這個位置的最大憧憬值.則有,
if(map[i][j]<=0) continue;
if(j>1&&map[i][j-1]>=0) f[i][j][k]=max(f[i][j][k],f[i][j-1][k-1]+map[i][j]);
if(j=0) f[i][j][k]=max(f[i][j][k],f[i][j+1][k-1]+map[i][j]);
if(i>1&&map[i-1][j]>=0) f[i][j][k]=max(f[i][j][k],f[i-1][j][k-1]+map[i][j]);
if(i=0) f[i][j][k]=max(f[i][j][k],f[i+1][j][k-1]+map[i][j]);
#include#include#include#include#include#define max(a,b) a>b?a:b
#define maxn 301
typedef long long ll;
int n,m;
ll f[maxn][maxn][24],map[maxn][maxn],ans;
inline void read(ll &t)
while(c>='0'&&c<='9')
t=f?-x:x;
}int main()
}for(int k=1;k<=23;++k) }}
for(int i=1;i<=n;++i) {
for(int j=1;j<=m;++j) {
if(ans上接【csp-s膜你考】不怕噩夢 (模擬)
CSP S膜你考 我們的可可西里
轉眼到了2008年的6月9日,盼望已久的高考結束了。我們踏上了向西的旅程 本來是想寫西去之路,可是考慮不太妥當 可可西里,多麼誘人的名詞,充滿了奇幻的色彩和自然的淳樸。從可可西里徒步走回家的決定是在1年半前定下的,而現在,終於可以實現那個鉤過手指的預定。我們的可可西里。在回家的路上,瘋子和蚊子看到了...
膜你賽 ROAD (跑路)
小a的家到公司的路可以看做乙個有向圖,小a家為點1,公司為點n,每條邊長度均為一千公尺。假設小a每秒鐘可以跑2 k千公尺 k是任意數 當然,所以總跑路長度不能超過maxlongint千公尺。問最少需要幾秒才能到公司。資料保證1到n至少有一條路徑。第一行兩個整數n,m,表示點的個數和邊的個數。接下來m...
2018 10 30 膜你賽 火柴
題目 題目描述 p同學總共有k根火柴,分別放在擺成一列的n個火柴盒內,保證k是n的倍數。p同學想要每個火柴盒都有相同數目的火柴,每次他可以從乙個火柴盒中拿一根火柴放到相鄰的火柴盒中。他想知道他最少要移動多少次。輸入輸出格式 輸入格式 第一行乙個整數n,表示火柴盒數。第二行n個整數a 1,a 2,a ...