fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. int tri[501][501];
  7. int dp[501][501];
  8. int N;
  9.  
  10. int solution(int deep, int index)
  11. {
  12. if (deep == N - 1) return tri[deep][index]; //맨 밑에 있는 요소에 접근했을 때
  13. if (!dp[deep][index]) // 대각선 왼쪽과 오른쪽의 값을 비교 후 더 큰 값을 현재 위치의 값을 더한 결과를 dp에 저장
  14. dp[deep][index] = max(solution(deep + 1, index), solution(deep + 1, index + 1)) + tri[deep][index];
  15. return dp[deep][index]; //dp의 값이 있거나 이미 처리가 된 경우
  16. }
  17.  
  18. int main(void)
  19. {
  20. cin >> N;
  21.  
  22. for (int i = 0; i < N; i++)
  23. for (int j = 0; j < i + 1; j++)
  24. cin >> tri[i][j];
  25.  
  26. cout << solution(0, 0);
  27. return 0;
  28. }
Success #stdin #stdout 0s 4908KB
stdin
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
stdout
30