테스트 케이스는

입력

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

출력

30

입니다

제 코드는

#include <stdio.h>

#define max(a, b) (((a)>(b))?(a):(b))

#define MAX 502

int tri[MAX][MAX] = { 0, };

int dp[MAX][MAX] = { 0, }; // i층 j번째 요소까지의 최대합

int main()

{

// 입력

int n;

scanf("%d", &n);

if (n < 1 || n > 500)

return 0;

int i, j;

for (i = 1; i <= n; i++)

for (j = 1; j <= i; j++)

{

scanf("%d", &tri[i][j]);

if (tri[i][j] < 0 || tri[i][j] > 99)

return 0;

}

// 계산

for (i = 1; i <= n; i++)

for (j = 1; j <= i; j++)

dp[i][j] = tri[i][j] + max(dp[i - 1][j - 1], dp[i - 1][j]);

// 출력

int result = 0;

for (j = 1; j <= n; j++)

if (result < dp[n][j]) result = dp[n][j];

printf("%d", result);


return 0;

}

입니다

감사합니다 행님들...