유형은 거의 비슷했고 max안에서 d[i-1][j-1]을 d[i-1][j+1]로 생각해서 조금 해맸었다. 
감으로 하지말고 종이로 생각하면서 하니까 문제점을 찾을 수 있었다. 
메모리랑 시간이 좀 효율적이지 못하다는 것을 보여주는데 나중에 배열을 덜 쓰던가 해서 수정해 보자.

#include <iostream>
#define max(a,b) ((a)>(b) ? (a) : (b))
using namespace std;
int d[501][501];
int sample[501][501];
int main() {
        int n;
        cin >> n;
        for (int i = 1; i <= n; ++i) {
               for (int j = 1; j <= i; ++j) {
                       cin >> sample[i][j];
               }
        }
        d[1][1] = sample[1][1];
        for (int i = 2; i <= n; ++i) {
               for (int j = 1; j <= i; ++j) {
                       d[i][j] += max((d[i - 1][j] + sample[i][j]), (d[i - 1][j - 1] + sample[i][j]));
               }
        }
        int ans = 0;
        for (int j = 1; j <= n; ++j) {
               if (ans < d[n][j])
                       ans = d[n][j];
        }
        cout << ans;
        return 0;
}



'알고리즘' 카테고리의 다른 글

[DP] 백준 2240 자두나무  (0) 2018.04.29
[DP] 백준 2302 극장 좌석  (0) 2018.04.29
[DP] 백준 14501 퇴사  (0) 2018.04.29
[DP] 백준 1520 내리막길  (0) 2018.04.29
[DP] 백준 9251 LCS  (0) 2018.04.29

+ Recent posts