https://www.acmicpc.net/problem/14430
14430번: 자원 캐기
인류의 차세대 인공지능 자원 캐기 로봇인 WOOK은 인간 대신 자원을 캐는 로봇이다. WOOK은 언제나 제한된 범위 내에서 자원을 탐색하며, 왼쪽 위 (1, 1)부터 오른쪽 아래 (N, M)까지 자원을 탐색한다.
www.acmicpc.net
DP로 해결했던 문제
DP[i][j] 를 $(i,j)$ 까지 이동해서 채취할 수 있는 최대 자원 으로 정의한다.
$(i,j)$ 로 이동하는 경우는
- $(i-1,j)$ 에서 이동한 경우
- $(i,j-1)$ 에서 이동한 경우
두가지 경우가 있으므로,
DP[i][j] = MAX( DP[i-1][j], DP[i][j-1] ) + arr[i][j]
로 계산해주면 정답을 얻을 수 있다.
DP의 정의에 따라 정답은 DP[N][M]
#include <bits/stdc++.h>
using namespace std;
int arr[345][345] = {0};
int dp[345][345] = {0};
int main(){
int N,M;
cin >> N >> M;
for(int i=1; i<=N; i++){
for(int j=1; j<=M; j++){
cin >> arr[i][j];
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + arr[i][j];
}
}
cout << dp[N][M];
return 0;
}
반응형