Study hard
(c++)백준 11055번: 가장 큰 증가 부분 수열 본문
https://www.acmicpc.net/problem/11055
11055번: 가장 큰 증가 부분 수열
수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수�
www.acmicpc.net
이 문제는 앞에서부터 dp배열을 채웠다.
가장 긴 증가하는 수열문제와 비슷하게 현재 인덱스보다 앞부분을 보면서 값이 더 작고 dp가 제일 큰 것을 저장한 후, 현재 dp에 더하면 된다.
2020/06/09 - [백준/DP] - (c++)백준 11053번: 가장 긴 증가하는 부분 수열
#include <iostream>
using namespace std;
int N;
int A[1001];
long long dp[1001];
void DP() {
long long Max = -1;
//앞에서부터
for (int i = 2; i <= N; i++) {
int maxSum = 0;
for (int j = i - 1; j >= 1; j--) {
if (A[i] > A[j] && dp[j] > maxSum)
maxSum = dp[j];
}
dp[i] += maxSum;
}
for (int i = 1; i <= N; i++) {
if (Max < dp[i])
Max = dp[i];
}
cout << Max << endl;
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> A[i];
dp[i] = A[i];//dp도 같이 초기화
}
DP();
return 0;
}
'백준 > DP' 카테고리의 다른 글
(c++)백준 11504번: 가장 긴 바이토닉 부분 수열 (0) | 2020.06.09 |
---|---|
(c++)백준 11722번: 가장 긴 감소하는 부분 수열 (0) | 2020.06.09 |
(c++)백준 11053번: 가장 긴 증가하는 부분 수열 (0) | 2020.06.09 |
(c++)백준 2156번: 포도주 시식 (0) | 2020.06.09 |
(c++)백준 9465번: 스티커 (0) | 2020.06.09 |