11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는
www.acmicpc.net
(1, 1)에서 (n, m)으로 가야 하는데 오른쪽, 밑, 오른쪽 밑으로 가면서 가져갈 수 있는 가치 중 최댓값을 구하면 된다.
우선 오른쪽 밑 대각선으로 가는 부분은 없다고 생각해도 된다.
왜나면 '무조건' 위나 왼쪽에서 챙겨가는 것이 더 이득이기 때문이다.
따라서 그냥 2차원 누적 합으로 생각해도 된다.
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, x, d[1001][1001];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
scanf("%d", &x);
d[i][j] = max(d[i - 1][j], d[i][j - 1]) + x;
}
}
printf("%d\n", d[n][m]);
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
BOJ 3055 탈출 (0) | 2020.11.24 |
---|---|
16236 아기 상어 (0) | 2020.11.22 |
BOJ 인내의 도미노 장인 호석 (0) | 2020.11.19 |
BOJ 4386 별자리 만들기 (0) | 2020.11.14 |
BOJ 1922 네트워크 연결 (0) | 2020.11.14 |