[BOJ] 11055번 가장 큰 증가 부분 수열

4362 단어 알고리즘DPDP

문제 바로가기

연관문제1. 가장 긴 증가하는 부분 수열
연관문제2. 가장 긴 감소하는 부분 수열

접근

연관문제 1,2에서 dp의 값을 부분 수열의 최대 길이로 했다면, 이 문제는 부분 수열의 최대 합을 구해주면 된다.

#include <iostream>
#include <algorithm>
using namespace std;

#define MAX 1001

int main() {
  std::ios::sync_with_stdio(false);
  int N;
  int num[MAX] = {0}, dp[MAX] = {0};

  cin >> N;
  for(int i = 1; i <= N; i++)
    cin >> num[i];
  for(int i = 1; i <= N; i++)
    dp[num[i]] = *max_element(dp, dp + num[i]) + num[i];

  cout << *max_element(dp + 1, dp + MAX);
}

좋은 웹페이지 즐겨찾기