반응형

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

 

2169번: 로봇 조종하기

첫째 줄에 N, M(1≤N, M≤1,000)이 주어진다. 다음 N개의 줄에는 M개의 수로 배열이 주어진다. 배열의 각 수는 절댓값이 100을 넘지 않는 정수이다. 이 값은 그 지역의 가치를 나타낸다.

www.acmicpc.net

 

각 지점에서 다음 지점으로 이동하면서 도착 지점을 다녀왔을 때의 최대 비용을 상좌우 방향 별로 기억해주었습니다.

 

#include <iostream>
#include <algorithm>
#include <cstring>
#define N_INF 0xfefefefe
using namespace std;

int dx[] = { 1, 0, 0 };
int dy[] = { 0, -1, 1 };

int n, m;
int map[1001][1001];
int dp[1001][1001][3];

int dfs(int x, int y, int dir) {
	int& res = dp[x][y][dir];

	if (x == n && y == m) {
		return map[x][y];
	}

	if (res != N_INF) {
		return res;
	}
	
	for (int i = 0; i < 3; i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (nx < 1 || ny < 1 || nx > n || ny > m || i * dir == 2) continue;
		res = max(res, dfs(nx, ny, i));
	}
	return res += map[x][y];
}


int main() {
	memset(dp, 0xfe, sizeof(dp));

	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	printf("%d", dfs(1, 1, 0));
}
반응형

'Algorithm' 카테고리의 다른 글

백준 4196 : 도미노  (0) 2021.11.19
백준 2150 : Strongly Connected Component  (0) 2021.11.19
백준 17404 : RGB거리 2  (0) 2021.11.19
백준 2836 : 수상 택시  (0) 2021.11.19
백준 2023 : 신기한 소수  (0) 2021.11.19

+ Recent posts