Coding_Test 연습/Baekjoon Online Judge

[BOJ] (C++) 11048 이동하기

Codetesing 2022. 4. 7. 21:16

실버1 문제이며, 전형적인 DP문제이다.

현재의 pos는 그 전의 pos가 될 수 있는것 중 제일 큰 것을 받아오면 된다.

문제 링크 https://www.acmicpc.net/problem/11048

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int N, M; cin >> N >> M;

	vector<vector<int>> maze(N + 1, vector<int>(M + 1));
	vector<vector<int>> DP(N + 1, vector<int>(M + 1));

	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= M; j++)
		{
			cin >> maze[i][j];
			DP[i][j] = 0;
		}


	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= M; j++)
			DP[i][j] = maze[i][j] + max(max(DP[i - 1][j], DP[i][j - 1]), DP[i - 1][j - 1]);

	cout << DP[N][M] << '\n';

	return 0;
}