장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[C++] BOJ 11055 가장 큰 증가하는 부분 수열
알고리즘/백준

[C++] BOJ 11055 가장 큰 증가하는 부분 수열

2022. 1. 1. 23:11
반응형

문제 출처

백준 온라인 저지

https://www.acmicpc.net/problem/11055

 

11055번: 가장 큰 증가 부분 수열

수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수

www.acmicpc.net

 

문제 

 

입 / 출력

 

풀이

LIS(Longest Increasing Subsequence) 라는 유명한 유형의 문제이며, DP를 활용해서 푸는 문제이다

 

수열의 특성을 이용해서 

  • 각각의 값이 이전 값보다 작고, (seq[j] < seq[i])  
  • 그 중에서 가장 큰 값 (dp[i] = max(dp[i], dp[j]+seq[i]);)

을 통해서 가장 긴 부분 수열을 구할 수 있다.

 

코드

#include <algorithm>
#include <iostream>

using namespace std;

const int MAX = 1001;
int dp[MAX], seq[MAX];
int N, result = 0;

int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> seq[i];
    dp[i] = seq[i];
  }

  for (int i = 0; i < N; i++) {
    for (int j = 0; j < i; j++) {
      if (seq[j] < seq[i])
        dp[i] = max(dp[i], dp[j] + seq[i]);
    }
    result = max(result, dp[i]);
  }

  cout << result << "\n";
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[C++] BOJ 1912 연속합  (0) 2022.01.04
[C++] BOJ 2631 줄세우기  (0) 2022.01.01
[C++] BOJ 11053 가장 긴 증가하는 부분 수열  (0) 2022.01.01
[C++] BOJ 2193 이친수  (0) 2021.12.29
[C++] BOJ 11057 오르막 수  (0) 2021.12.29
    '알고리즘/백준' 카테고리의 다른 글
    • [C++] BOJ 1912 연속합
    • [C++] BOJ 2631 줄세우기
    • [C++] BOJ 11053 가장 긴 증가하는 부분 수열
    • [C++] BOJ 2193 이친수
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바