dp 연습 시작해봤다. dp 문제중에서는 제일 쉬운듯 하다.
입력할 때의 N,M과 결과계산의 N,M을 따로 구했더니 범위지정에서 애로사항이 있었다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_maze(vector<vector<int>> &maze)
{
int N, M, candy;
int i, j;
cin >> N >> M;
maze.resize(N + 1, vector<int>(M + 1, 0));
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
{
cin >> maze[i][j];
}
}
/*for (i = 0; i <= N; i++)
{
for (j = 0; j <= M; j++)
{
cout << maze[i][j] << " ";
}
cout << "\n";
}*/
return;
}
void find_answer(vector<vector<int>> &maze)
{
int i, j;
int N = maze.size(), M = maze[0].size(), current;
vector<vector<int>> dp(N, vector<int>(M, 0));
for (i = 1; i < N; i++)
{
for (j = 1; j < M; j++)
{
current = maze[i][j];
dp[i][j] = max(dp[i-1][j-1], max(dp[i-1][j], dp[i][j-1])) + current;
//cout << "(i:" << i << "/j:" << j << "):" << dp[i][j] << " ";
}
//cout << "\n";
}
cout << dp[N-1][M-1] << "\n";
/*for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
cout << dp[i][j] << " ";
}
cout << "\n";
}*/
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<vector<int>> maze;
input_maze(maze);
find_answer(maze);
return 0;
}