| #include <iostream> using namespace std; int max(int a, int b) { return a > b ? a: b; } int max(int a, int b, int c) { return max(a,b)>c ? max(a,b) : c; } int main() { int N ,M; int candy[1001][1001]={0}; cin >> N >> M; for(int i=1; i<=N; i++) for(int j=1; j<=M; j++) cin >> candy[i][j]; 
 int dp[1001][1001]={0}; 
 for(int i=1; i<=N; i++) for(int j=1; j<=M; j++) { dp[i][j]=candy[i][j]+max(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]); } cout << dp[N][M]; } | 
| i-1,j-1 | i-1,j | 
| i,j-1 | i,j | 
i,j로 이동가능한 세 방향은 위와 같다. 다음 중 큰 값이 dp[i][j]
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
| 171022_NUMB3RS_두니발 박사의 탈옥 (0) | 2017.10.22 | 
|---|---|
| 1710221_2302_극장좌석 (0) | 2017.10.21 | 
| 171019_1699_제곱수의 합 (0) | 2017.10.19 | 
| 171018_p를 출력하는 프로그램 p (0) | 2017.10.18 | 
| 171017_2011_암호코드 (0) | 2017.10.17 |