#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 |