滑雪(洛谷-P1434)
題目描述
Michael喜歡滑雪。這并不奇怪,因?yàn)榛┑拇_很刺激。可是為了獲得速度,滑的區(qū)域必須向下傾斜,而且當(dāng)你滑到坡底,你不得不再次走上坡或者等待升降機(jī)來載你。Michael想知道在一個(gè)區(qū)域中最長的滑坡。區(qū)域由一個(gè)二維數(shù)組給出。數(shù)組的每個(gè)數(shù)字代表點(diǎn)的高度。下面是一個(gè)例子:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一個(gè)人可以從某個(gè)點(diǎn)滑向上下左右相鄰四個(gè)點(diǎn)之一,當(dāng)且僅當(dāng)高度減小。在上面的例子中,一條可行的滑坡為24-17-16-1(從24開始,在1結(jié)束)。當(dāng)然25-24-23―┅―3―2―1更長。事實(shí)上,這是最長的一條。
輸入輸出格式
輸入格式:
輸入的第一行為表示區(qū)域的二維數(shù)組的行數(shù)R和列數(shù)C(1≤R,C≤100)。下面是R行,每行有C個(gè)數(shù),代表高度(兩個(gè)數(shù)字之間用1個(gè)空格間隔)。
輸出格式:
輸出區(qū)域中最長滑坡的長度。
輸入輸出樣例
輸入樣例#1:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
輸出樣例#1:
25
源代碼
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<set> #include<map> #include<stack> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 101 #define MOD 123 #define E 1e-6 using namespace std; int r,c; int g[N][N],h[N][N]; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; bool judge(int x,int y) {if (x<1||x>r||y<1||y>c)return false;return true;} int dfs(int x,int y) {if(h[x][y])//點(diǎn)的最長步數(shù)已知return h[x][y];else//點(diǎn)的最長步數(shù)未知h[x][y]=1;for(int i=0;i<4;i++){int xx=x+dir[i][0];int yy=y+dir[i][1];if(judge(xx,yy))//當(dāng)前高度未出界if(g[xx][yy]<g[x][y])//如果下一步的高度比當(dāng)前高度低h[x][y]=max(h[x][y],1+dfs(xx,yy));}return h[x][y]; } int main() {cin>>r>>c;for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin>>g[i][j];int maxx=-INF;for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)maxx=max(maxx,dfs(i,j));cout<<maxx<<endl;return 0; }?
總結(jié)
以上是生活随笔為你收集整理的滑雪(洛谷-P1434)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暑期训练日志----2018.8.5
- 下一篇: 训练日志 2018.9.1