[λ°±μ€/C++] 11054λ² κ°μ₯ κΈ΄ λ°μ΄ν λ λΆλΆ μμ΄
π€λ¬Έμ μ΄ν΄
μ΄λ ν μ«μλ₯Ό κΈ°μ€μΌλ‘ μΌμͺ½μλ κ°μνλ μ«μλ€μ΄, μ€λ₯Έμͺ½μλ μ¦κ°νλ μ«μλ€μ΄ μ€λ λΆλΆ μμ΄μ μ°Ύλ λ¬Έμ μ΄λ€.
μ΄λ, κ°μ μ«μκ° μ°μμ μΌλ‘ λμ¬ μ μλ€.
π‘첫λ²μ§Έ μμ΄λμ΄
κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄μ μμ© λ²μ μ΄μλ€.
π₯νμ΄π₯
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;
}