알고리즘

[백준/DP/C++] 11055번 가장 큰 증가 부분 수열

데메즈 2022. 12. 29. 15:29
728x90
반응형

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

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

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

www.acmicpc.net

dp는 수열 a와 같이 초기화해준다

전의 수열 값과 비교하면서 자신의 값보다 작으면 그 값의 dp값에 자신의 값을 더한 것과 자신의 dp값을 비교해 더 큰 값을 넣어주면 된다

#include <bits/stdc++.h>

using namespace std;
int n;
int dp[1001] = {0}, a[1001] ={0};

int main(void) {
    cin >> n;

    for(int i=1; i<=n; i++){
        cin >> a[i];
        dp[i] = a[i];
    }

    for(int i=2; i<=n; i++){
        for(int j=1; j<i; j++){
            if(a[i]>a[j])
                dp[i] = max(dp[i], dp[j]+a[i]);
        }
    }

    int result = 0;
    for(int i=1; i<=n; i++)
        result = max(result, dp[i]);
    cout << result << endl;

    return 0;
}
반응형

728x90
반응형