본문으로 바로가기

풀이코드

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 1000
// 11055

int main(){
	int n;
	
	cin >> n;
	cin.ignore();
	
	vector<int> vec(n + 1);
	for(int i = 1; i <= n; i++){
		cin >> vec[i];
	}
	
	vector<int> mem(n + 1, 0); // 해당 숫자에서의 최대 증가 배열 합을 저장 
	for(int i = 1; i <= n; i++){
		int maxMem = -1;
		for(int j = 1; j < i; j++){
			if(vec[j] >= vec[i]) continue;
			if(maxMem < mem[j]) {maxMem = mem[j];}
		}
		if(maxMem != -1) mem[i] = maxMem + vec[i];
		else mem[i] = vec[i];
	}
	
	int res = -1;
	for(int i = 1; i <= n; i++){
		if(res < mem[i]) res = mem[i];
	}
	
	cout << res << endl;

}

 

해설

11053 번 문제와 동일하다. 단지 길이를 위해 1 만을 더해주느냐. 혹은 최대 합을 구하기 위해서 해당 index 의 값을 더해주느냐의 차이 만 있었다.

반응형

'ps > 다이나믹 프로그래밍' 카테고리의 다른 글

[algospot] JUMPGAME 외발 뛰기  (0) 2021.07.18
11722 가장 긴 감소하는 부분 수열  (0) 2021.07.16
11053 가장 긴 증가하는 부분 수열 ★  (0) 2021.07.16
2156 포도주 시식  (0) 2021.07.16
9465 스티커  (0) 2021.07.14