mushi   7년 전

현위치보다 큰 정수값이 있는 곳으로 최대 몇번 이동 가능한가로 계산했는데

답이 틀렸다고 뜹니다.

예제는 정답(4)이 뜨며, 제가 직접 예제를 만들어 해봐도 별 이상이 없어 보이는데

틀리네요. 이상한 부분을 못 찾겠습니다. 

소스자체가 방향성을 잘못 잡고 작성한건가요?

crasy111   7년 전

if(y+1<n && arr[y+1][x]>arr[y][x])//down
    {
        //printf("D\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y+1, x));
    }
    if(y-1>0 && arr[y-1][x]>arr[y][x])//up
    {
        //printf("U\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y-1, x));
    }
    if(x+1<n && arr[y][x+1]>arr[y][x])//right
    {
        //printf("R\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y, x+1));
    }
    if(x-1>0 && arr[y][x-1]>arr[y][x])//left
    {
        //printf("L\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y, x-1));
    }

여기서

if(y+1<n && arr[y+1][x]>arr[y][x])//down
    {
        //printf("D\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y+1, x));
    }
    if(y-1>=0 && arr[y-1][x]>arr[y][x])//up
    {
        //printf("U\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y-1, x));
    }
    if(x+1<n && arr[y][x+1]>arr[y][x])//right
    {
        //printf("R\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y, x+1));
    }
    if(x-1>=0 && arr[y][x-1]>arr[y][x])//left
    {
        //printf("L\n");
        cache[y][x]=MAX(cache[y][x], ret+panda(y, x-1));
    }

이렇게, (0,y) 혹은 (x,0)으로 가는 경우도 생각해주셔야 되죠.

그렇게 해서 통과 되었습니다. 실수하셨네요.

mushi   7년 전

아!!

정말 감사합니다.

전혀 못 알아 봤네요.

댓글을 작성하려면 로그인해야 합니다.