一枚刚学完递归的孩儿~~只有40分,,

P1434 [SHOI2002] 滑雪

oc13 @ 2019-07-16 18:37:57

求助大神!!!

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int dx[]= {0,0,1,-1};
int dy[]= {1,-1,0,0};
long long h[105][105];
long long v[105][105];
int r,c;
long long hx(int a,int b) {
    long long l=1;
    if(v[a][b]) return v[a][b];
    v[a][b]=1;
    for(int i=0; i<4; i++) {
        int x=a+dx[i];
        int y=b+dy[i];
        if(x>0&&x<=r&&y>0&&y<=c&&h[x][y]<h[a][b])
            l=max(l,(h[x][y]+1)),hx(x,y);
    }
    return v[a][b]=l;
}
int main() {
    long long ans=1;
    cin>>r>>c;
    for(int i=1; i<=r; i++)
        for(int j=1; j<=c; j++)
            cin>>h[i][j];
    for(int i=1; i<=r; i++)
        for(int j=1; j<=c; j++) {
            ans=max(ans,hx(i,j));
        }
    cout<<ans;
    return 0;
}

by 灵光一闪 @ 2019-07-16 19:01:38

@oc13 不一定从最高的点走就是最优鸭。 比如:

1 1 1 8 7
1 9 1 5 6
1 1 1 4 3

answer:6


|