PS

[백준] 1965번 상자넣기 C++

Eastplanet 2022. 6. 26. 13:06

문제 출처: https://www.acmicpc.net/problem/1965

 

1965번: 상자넣기

정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가

www.acmicpc.net

가장 긴 증가하는 부분 수열을 찾으면 되는 문제이다.

dp[i] < dp[0~i-1]+1 인 경우 dp[i]를 갱신하여주며 가장 긴 수열을 찾아낸다.

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include <string>

using namespace std;

int main() {
    ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    
    int N;
    cin >> N;
    int arr[1001];
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }
    int dp[1001];
    fill(&dp[0], &dp[1001], 1);

    int maxV = 1;

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < i; j++) {
            if (arr[i] > arr[j]) {
                if (dp[i] < dp[j] + 1) {
                    
                    dp[i] = dp[j] + 1;
                    if (maxV < dp[i])maxV = dp[i];
                }
            }
        }
    }

    cout << maxV;
    
}