728x90

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

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마다 방에 놓여져있는 사탕을 모두 가져갈 수 있다. 또, 미로 밖으

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int main() {
	cin.tie(NULL);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> maze(n, vector<int>(m));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> maze[i][j];
		}
	}
	vector<vector<int>> candy(n, vector<int>(m));
	candy[0][0] = maze[0][0];
	for (int i = 1; i < m; i++) {
		candy[0][i] = candy[0][i - 1] + maze[0][i];
	}
	for (int i = 1; i < n; i++) {
		candy[i][0] = candy[i - 1][0] + maze[i][0];
	}
	for (int i = 1; i < n; i++) {
		for (int j = 1; j < m; j++) {
			candy[i][j] = max(candy[i - 1][j], candy[i][j - 1]) + maze[i][j];
		}
	}
	cout << candy[n - 1][m - 1];
	return 0;
}
728x90

+ Recent posts