๋ฐ์ํ
https://www.acmicpc.net/problem/11053
๋ฌธ์
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ์์ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋ 4์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์์ด A๋ฅผ ์ด๋ฃจ๊ณ ์๋ Ai๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int lis(int n, vector<int>&a) {
vector<int>dp (n,1); // dp[i] : a[i]๋ก ๋๋๋ ๊ฐ์ฅ ํฐ ์์ด
for(int i=0; i<n; i++){
int tmpMax = 0;
for(int j=0; j<i; j++) {
if(a[j]<a[i] && tmpMax<dp[j])
// ํ์ฌ ์ a[i]๋ณด๋ค ์์ ์ซ์๋ฅผ ์ฐพ๊ณ ํด๋น ์ซ์๊ฐ ์ ๊น์ง์ ๋ฌธ์์ด ๊ฐฏ์ dp[j] ์ ์ต๋๊ฐ์ฐพ๊ธฐ
tmpMax = dp[j];
}
dp[i] += tmpMax;
}
int maxDp = *max_element(dp.begin(), dp.end());
return maxDp;
}
int main() {
int n;
cin >> n;
vector<int> a(n, 0);
for(int i=0; i<n; i++)
cin >> a[i];
cout << lis(n, a);
return 0;
}
/*
*/
๋ฐ์ํ
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2748๋ฒ: ํผ๋ณด๋์น ์ 2 (0) | 2023.01.30 |
---|---|
[BOJ S1][C++] ๋ฐฑ์ค 2156๋ฒ: ํฌ๋์ฃผ ์์ (0) | 2022.09.30 |
[BOJ S2][C++] ๋ฐฑ์ค 11048๋ฒ: ์ด๋ํ๊ธฐ (0) | 2022.09.27 |
[BOJ][C++] ๋ฐฑ์ค 12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2022.09.27 |
[BOJ][C++] ๋ฐฑ์ค 2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2022.09.27 |