알고리즘

백준_11055_가장 큰 증가 부분 수열

shj718 2022. 2. 7. 16:59

앞서 푼 다이나믹 프로그래밍(dp) 문제들과는 점화식의 로직이 살짝 달랐다.

j를 1~(i-1) 로 증가시켜가면서 d[i]값을 갱신하는 것이 핵심이었다.

 

#include <iostream>
#include <algorithm>
#define MAX 1001

using namespace std;

int N, A[MAX], d[MAX], answer;

void dp() {
	int maxD = 0;
	for (int i = 1; i <= N; i++) {
		d[i] = A[i];
		for (int j = 1; j < i; j++) {
			if (A[i] > A[j])
				d[i] = max(d[i], d[j] + A[i]);
		}
		maxD = max(maxD, d[i]);
	}
	answer = maxD;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> A[i];
	}
	dp();
	cout << answer << '\n';
	return 0;
}