티스토리 뷰

https://www.acmicpc.net/problem/1937

 

1937번: 욕심쟁이 판다

n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서

www.acmicpc.net

LIS를 구하는 문제입니다.

메모이제이션을  이용해 풀이했습니다.


C++  소스 코드

#include <cstdio>
#include <algorithm>
using namespace std;
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
int n, a[501][501], d[501][501];
int dp(int x,int y){
    if (d[x][y]!=0) return d[x][y];
    d[x][y]=1;
    for(int i=0;i<4;i++){
        int nx = x+dx[i], ny = y+dy[i];
        if (nx < 0 || nx >= n || ny <0 || ny>=n ) continue;
        if (a[x][y] < a[nx][ny]){
            d[x][y] = max(d[x][y],dp(nx,ny)+1);
        }
    }
    return d[x][y];
}
int main(){
    int ans = 0;
    scanf("%d", &n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d", &a[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            ans = max(ans, dp(i,j));
        }
    }
    printf("%d\n", ans);
    return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함