???玄学代码随机AC???

P1434 [SHOI2002] 滑雪

崔化博 @ 2021-03-13 08:02:42

#include <iostream>
#include <climits>
#include <cstdio>
#include <algorithm>
using namespace std;
int r,c,a[105][105]={INT_MAX},maxx,f[105][105];
int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int x,int y){
    if(f[x][y])
        return f[x][y];
    f[x][y]=1;
    for(int i=0;i<4;++i){
        int dx=x+xy[i][0],dy=y+xy[i][1];
        if(a[x][y]>a[dx][dy])
            f[x][y]=max(dfs(dx,dy)+1,f[x][y]);
    }
    return f[x][y]; 
}
int main()
{
    scanf("%d%d",&r,&c);
    for(int i=1;i<=r;++i)
        for(int j=1;j<=c;++j)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=r;++i){
        for(int j=1;j<=c;++j){
            maxx=max(dfs(i,j),maxx);
        }
    }
    printf("%d",maxx-1);
    return 0;
} 

by int64 @ 2021-03-13 08:04:48

@崔化博 应该是评测姬坏了,等一会试试


by EuphoricStar @ 2021-03-13 08:23:31

@崔化博 你的程序有 UB,亲测这样可过

#include <iostream>
#include <climits>
#include <cstdio>
#include <algorithm>
using namespace std;
int r,c,a[105][105],maxx,f[105][105];
int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int x,int y){
    if(f[x][y])
        return f[x][y];
    f[x][y]=1;
    for(int i=0;i<4;++i){
        int dx=x+xy[i][0],dy=y+xy[i][1];
        if (dx<1||dx>r||dy<1||dy>c) continue;
        if(a[x][y]>a[dx][dy])
            f[x][y]=max(dfs(dx,dy)+1,f[x][y]);
    }
    return f[x][y]; 
}
int main()
{
    scanf("%d%d",&r,&c);
    for(int i=1;i<=r;++i)
        for(int j=1;j<=c;++j)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=r;++i){
        for(int j=1;j<=c;++j){
            maxx=max(dfs(i,j),maxx);
        }
    }
    printf("%d",maxx);
    return 0;
} 

by Elma_ @ 2021-03-13 08:32:40

不判边界能过才有鬼吧/wq


|