Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 11722번 - κ°€μž₯ κΈ΄ κ°μ†Œν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄

dkswnkk 2021. 10. 31. 20:03

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

 

11722번: κ°€μž₯ κΈ΄ κ°μ†Œν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄

μˆ˜μ—΄ Aκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ°€μž₯ κΈ΄ κ°μ†Œν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 예λ₯Ό λ“€μ–΄, μˆ˜μ—΄ A = {10, 30, 10, 20, 20, 10} 인 κ²½μš°μ— κ°€μž₯ κΈ΄ κ°μ†Œν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄μ€ A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
/*
μˆ˜μ—΄μ„ μ—­μˆœμœΌλ‘œ μƒκ°ν•˜μ—¬ κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄μ„ κ΅¬ν•˜κ²Œ 되면 λœλ‹€.
*/
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int N; cin >> N;
    vector<int>arr(N);
    vector<int>dp(1001,1);
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }
    reverse(arr.begin(), arr.end());    //μˆ˜μ—΄μ„ μ—­μˆœμœΌλ‘œ λ°”κΎΌλ‹€.

    for (int i = 1; i < N; i++) {        //κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„μˆ˜μ—΄μ„ κ΅¬ν•œλ‹€.
        for (int k = 0; k < i; k++) {
            if (arr[i] > arr[k]) dp[i] = max(dp[i], dp[k] + 1);
        }
    }
    cout << *max_element(dp.begin(), dp.end());    

}