<Baekjoon> #11048 Dynamic Programming_이동하기 c++
각 정점에서 최대로 가져올 수 있는 사탕의 개수를 구해서 (n,m)
까지 이르렀을 때 저장된 최댓값을 return 하면 된다. 사탕의 개수는 (1,1)
부터 (n,m)
까지 저장되어 있기 때문에 위에서 부터 top-down 방식으로 memoization 기법을 사용한다.
#include <iostream> #include <algorithm> using namespace std; const int MAX = 1001; int maze[MAX][MAX]; int dp[MAX][MAX]; int n, m; void countCandy() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int sum = max({ dp[i-1][j-1], dp[i-1][j], dp[i][j-1] }); dp[i][j] = sum + maze[i][j]; } } } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> maze[i][j]; countCandy(); cout << dp[n][m] << endl; return 0; }
Author And Source
이 문제에 관하여(<Baekjoon> #11048 Dynamic Programming_이동하기 c++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmy/Baekjoon-11048-Dynamic-Programming이동하기-c저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)