티스토리 뷰
문제
출처 : https://www.acmicpc.net/problem/1932
풀이과정
DP를 활용하면 간단하게 풀 수 있는 문제이다.
맨 왼쪽과 맨 오른쪽을 제외한 곳은 오른쪽, 왼쪽 중 큰 것을 더하여 저장하며, 맨 왼쪽, 오른쪽은 정해진 수를 더해서 저장한다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> #include <algorithm> using namespace std; int n,ans; int DP[501][501]; int main() { cin.sync_with_stdio(false); cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { cin >> DP[i][j]; if (j == 1) DP[i][j] = DP[i - 1][j] + DP[i][j]; // 항상 맨 왼쪽 칸은 언제나 오른쪽 값과 더해진다. else if (j == i) DP[i][j] = DP[i - 1][j - 1] + DP[i][j]; // 각 층의 마지막 값은 항상 왼쪽 값과 더해진다. else DP[i][j] = max(DP[i - 1][j - 1], DP[i - 1][j]) + DP[i][j]; // 왼쪽, 오른쪽 둘 중에 큰 값과 더한다. if (ans < DP[i][j]) ans = DP[i][j]; } } cout << ans; return 0; } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11502번 붕어빵 판매하기 (0) | 2017.12.29 |
---|---|
[백준] 10844번 쉬운 계단 수 (0) | 2017.12.28 |
[백준] 2606번 바이러스 (0) | 2017.12.20 |
[백준] 11655번 ROT13 (0) | 2017.12.19 |
[백준] 1158번 조세퍼스 문제 (0) | 2017.12.15 |