OpenJudge

完美题解

  • 支天命YCYZ(支天命)
    支天命YCYZ(支天命) 17.8.1 回复

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int direction[4][2] = {0,-1,-1,0,1,0,0,1};
    int map[105][105];
    int dp[105][105];
    int row,col;
    int DFS(int map_x,int map_y) {
    if(dp[map_x][map_y] != -1) {
    return dp[map_x][map_y];
    }
    int cnt_l=1;
    for(int i=0; i<4; i++) {
    int re_mx = map_x + direction[i][0];
    int re_my = map_y + direction[i][1];
    if(re_mx >= row || re_my >= col)
    continue;
    else if(re_mx < 0 || re_my < 0)
    continue;
    else {
    if(map[re_mx][re_my] > map[map_x][map_y]) {
    cnt_l = max(DFS(re_mx,re_my)+1,cnt_l);
    }
    }
    }
    dp[map_x][map_y] = cnt_l;
    return cnt_l;
    }
    int main() {
    while(~scanf("%d%d",&row,&col)) {
    for(int i=0; i<row; i++) {
    for(int j=0; j<col; j++) {
    scanf("%d",&map[i][j]);
    }
    }
    int long_m=0;
    memset(dp,-1,sizeof(dp));
    for(int i=0; i<row; i++) {
    for(int j=0; j<col; j++) {
    long_m = max(long_m,DFS(i,j));
    }
    }
    printf("%d\n",long_m);
    }
    return 0;
    }

想要评论吗?

注册OpenJudge账号,如果您已经注册,请先登入