04-27 17:19
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

욕짐생이 팬더 문제 본문

카테고리 없음

욕짐생이 팬더 문제

벤치마킹 2018. 4. 24. 01:37

 dfs + dp 대표적인 dp 문제로 

1)dp 를 visit 배열 처럼 사용

2) isRange 함수 처럼 분리

3) 제일 중요한 find 에 조건이 만족 하면 + 1 값을 업데이트 


 

// x, 와 y 에서의 가장 큰 값 

int find(int y, int x){

if (dp[y][x] != 0) return dp[y][x];


for (int i = 0; i < 4; i++){

int nx, ny;

nx = x + dx[i];

ny = y + dy[i];


if (inRange(ny, nx) && map[y][x] < map[ny][nx])

{

dp[y][x] = MAX(dp[y][x], find(ny, nx) + 1);

}

}

return dp[y][x];

}


int main(void) {


cin >> N;


for (int i = 0; i < N; i++)

for (int j = 0; j < N; j++)

cin >> map[i][j], dp[i][j] = 0;


// dp 테이블 채우기  

int res = 0;

for (int i = 0; i < N; i++){

for (int j = 0; j < N; j++){ // 팬더의 시작좌표를 정해주고 최댓값을 갱신한다.  

res = MAX(res, find(i, j));

}

}

cout << res +1 << endl;

return 0;

}


Comments