반응형
DP로 문제를 해결했다.
DFS, BFS로 풀 수 있는 문제가 아니다. 1000 x 999 x 998 ... 엄청난 시간이 나올 것.
// 오른쪽, 아래, 오른쪽아래 움직일 수 있는 특성.
// 행 기준으로 '->' 순환하며 dp 하면 될 것 같다.
// 시간복잡도 O(n)
#include <iostream>
#define MAX(a,b) (a>=b?a:b)
using namespace std;
int N, M;
int Arr[1000][1000];
int DP[1000][1000];
int sx[3] = {0, -1, -1};
int sy[3] = {-1, 0, -1};
int tmp_x, tmp_y;
int main() {
cin >> N >> M;
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
cin >> Arr[i][j];
}
}
DP[0][0] = Arr[0][0];
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
for(int k = 0; k < 3; k++) {
tmp_x = i + sx[k];
tmp_y = j + sy[k];
if(tmp_x < 0 || tmp_x > N || tmp_y < 0 || tmp_y > M)
continue;
DP[i][j] = MAX(DP[i][j], (DP[tmp_x][tmp_y]+Arr[i][j]));
}
}
}
cout << DP[N-1][M-1] << "\n";
}
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 2636번 치즈 (0) | 2022.06.24 |
---|---|
[BaekJoon/백준] 2583번 영역 구하기 (0) | 2022.06.24 |
[BaekJoon/백준] 11403번 경로 찾기 (0) | 2022.06.23 |
[BaekJoon/백준] 1026번 보물 (0) | 2022.06.22 |
[BaekJoon/백준] 3184번 양 (0) | 2022.06.22 |