๐ค๋ฌธ์ ์ดํด
์ด๋ ํ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์๋ ๊ฐ์ํ๋ ์ซ์๋ค์ด, ์ค๋ฅธ์ชฝ์๋ ์ฆ๊ฐํ๋ ์ซ์๋ค์ด ์ค๋ ๋ถ๋ถ ์์ด์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ด๋, ๊ฐ์ ์ซ์๊ฐ ์ฐ์์ ์ผ๋ก ๋์ฌ ์ ์๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ์์ฉ ๋ฒ์ ์ด์๋ค.
๐ฅํ์ด๐ฅ
dp_in[i]๋ i๋ฒ์งธ ์๋ฅผ ๋ง์ง๋ง ์๋ก ํ์ ๋ ์ฆ๊ฐํ๋ ์์ ๊ฐ์๋ฅผ ์๋ฏธํ๊ณ ,
dp_de[i]๋ i๋ฒ์งธ ์๋ฅผ ์ฒซ๋ฒ์งธ ์๋ก ํ์ ๋ ๊ฐ์ํ๋ ์์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
1. dp_in๊ณผ dp_de๋ ๋ชจ๋ 1๋ก ์ด๊ธฐํํ๋ค.
2. ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ฌ ์ซ์๊ฐ ๋ค์ ์ซ์๋ณด๋ค ํฌ๋ค๋ฉด, ํ์ฌ dp_in๊ณผ ์ด์ ๊ฐ dp_in์ 1์ ๋ํ ๊ฐ ์ค์์ ๋ ํฐ ๊ฐ์ dp_in์ ํ์ฌ๊ฐ์ ๋ฃ์ด์ค๋ค.
3. ๋ค์์๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ฌ ์ซ์๊ฐ ๋ค์ ์ซ์๋ณด๋ค ํฌ๋ค๋ฉด, ํ์ฌ dp_de์ ์ด์ ๊ฐ dp_de์ 1์ ๋ํ ๊ฐ ์ค์์ ๋ ํฐ ๊ฐ์ dp_de์ ํ์ฌ๊ฐ์ ๋ฃ์ด์ค๋ค.
4. dp_in๊ณผ dp_de์ i๋ฒ์งธ ์๋ ๊ฒน์น๋ฏ๋ก dp_in๊ณผ dp_de๋ฅผ ๋ํ๊ณ 1์ ๋นผ์ค ๊ฐ๋ค์ ๋น๊ตํด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.
โํธ๋ฌ๋ธ ์ํ
์ ํ์ด์์์ 4๋ฒ์์ dp_in + dp_de๋ฅผ ํด์ค ๋ ๊ฒน์น๋ ๊ฐ 1์ ๋นผ์ฃผ์ง ์์์ ํ๋ ธ์๋ค.
#include <iostream>
#include <cmath>
using namespace std;
int dp_in[1001];
int dp_de[1001];
int arr[1001];
int n;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
for (int i = 0; i < n; i++) {
dp_in[i] = 1;
dp_de[i] = 1;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (arr[j] < arr[i]) {
dp_in[i] = max(dp_in[i], dp_in[j] + 1);
}
}
}
for (int i = n - 1; i >= 0; i--) {
for (int j = n - 1; j >= i; j--) {
if (arr[j] < arr[i]) {
dp_de[i] = max(dp_de[i], dp_de[j] + 1);
}
}
}
int result = dp_in[0] + dp_de[0] - 1;
for (int i = 1; i < n; i++) {
int tmp = dp_in[i] + dp_de[i] - 1;
if (result < tmp) result = tmp;
}
cout << result;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1766๋ฒ ๋ฌธ์ ์ง (0) | 2022.07.21 |
---|---|
[๋ฐฑ์ค/C++] 13398๋ฒ ์ฐ์ํฉ 2 (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 5021๋ฒ ์์๊ณ์น (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 11057๋ฒ ์ค๋ฅด๋ง ์ (0) | 2022.07.18 |