백준

백준 1965 C++

solfa 2024. 2. 13. 12:53

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

 

1965번: 상자넣기

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

www.acmicpc.net

 

문제 정리

주어진 상자들의 크기를 고려하여 각 상자 안에 다른 상자를 넣을 수 있는 최대 개수! 자르긴가

 

생각

각 상자를 마지막으로 포함하는 최대 상자 개수를 저장하는 배열 만들기 -> 저번에 했던 dp랑 비슷한데? 똑같은 형식인듯!!

 

코드

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;

    int box[n];
    int dp[n];

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

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

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

 

선택한 원소의 최댓값 + 1을 한 값(box[i])이 현재 상태의 최댓값보다 크면 그 값으로 자기자신의 값을 갱신

 

중요한 점

얘 역시 1이 시작이여야 함

자기자신을 선택하는 순간 상자의 개수가 최소 1개는 되어야 하기 때문

-> 1로 초기화 해줌

 

 

전에 푼 백준 2631과 점화식이 똑같다!! dp의 맛을 알아가는중

 

백준 2631 풀이는 

https://5ffthewall.tistory.com/62

728x90

'백준' 카테고리의 다른 글

백준 2798 C++  (0) 2024.02.17
백준 20055 C++  (0) 2024.02.13
백준 2631 C++  (0) 2024.02.13
백준 2579 C++  (1) 2024.01.31
백준 1789 C++ 시간초과  (2) 2024.01.31