0. 문제 |
1. 아이디어 |
1) n번째 원소의 dp값 = n-1번까지의 원소들 중 자신보다 작은 값 중에 가장 큰 dp의 값 + 자신의 값
2. 소스코드 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <iostream>
int main()
{
int N, result = 0, arr[1000], dp[1000];
std::cin >> N;
for (int i = 0; i < N; i++)
std::cin >> arr[i]; // arr에 수열의 값들 입력
for (int i = 0; i < N; i++)
{
int max = 0;
for (int j = 0; j < i; j++)
if (arr[j] < arr[i]) // 자신보다 작은 값일 때
if (dp[j] > max) max = dp[j];
dp[i] = max + arr[i];
if (dp[i] > result) result = dp[i];
}
std::cout << result;
}
|
cs |
3. 결과 |
4. 피드백 |
-
차곡차곡 쌓아간다는 DP의 느낌을 잘 기억하자!
'알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 11054번 - 가장 긴 바이토닉 부분 수열 (0) | 2020.03.22 |
---|---|
[C++] 백준 11722번 - 가장 긴 감소하는 부분 수열 (0) | 2020.03.22 |
[C++] 백준 11053번 - 가장 긴 증가하는 부분 수열 (0) | 2020.03.15 |
[C++] 백준 2156번 - 포도주 시식 (0) | 2020.03.15 |
[C++] 백준 9465번 - 스티커 (0) | 2020.03.14 |