[λ°±μ€(BOJ)] κ°μ₯ κΈ΄ λ°μ΄ν λ λΆλΆ μμ΄(11054) C++
λ¬Έμ : BOJ_11054λ² κ°μ₯ κΈ΄ λ°μ΄ν λ λΆλΆ μμ΄
λ¬Έμ μ€λͺ
DP
κΈ°μ‘΄μ μ¦κ°νλ μμ΄, κ°μνλ μμ΄μ΄ ν©μ³μ§ λ¬Έμ μ
λλ€.
μμ΄μ΄ μ¦κ°νλ€κ° κ°μκ° λλ κ²½μ°, μμ΄μ΄ κ³μ μ¦κ°νλ κ²½μ°, μμ΄μ΄ κ³μ κ°μνλ κ²½μ°κ° λͺ¨λ λ°μ΄ ν λ λΆλΆ μμ΄μ
λλ€.
μμ΄μ΄ κ°μνλ€κ° μ¦κ°νλ κ²½μ°λ ν΄λΉλμ§ μμ΅λλ€.
DPλ₯Ό νμ©ν΄ ν΄κ²°ν μ μμμ΅λλ€.
Solution
μμ μΈκΈν μΈ κ°μ§ κ²½μ°λ‘ λλμ΄μ DP λ°°μ΄μ κ°±μ ν΄ μ£Όμ΄μΌ ν©λλ€.
- μμ΄μ΄ κ³μ μ¦κ°νλ κ²½μ° ->
dp[0][νμ¬ μΈλ±μ€]
- μμ΄μ΄ μ¦κ°νλ€κ° κ°μκ° λλ κ²½μ° ->
dp[1][νμ¬ μΈλ±μ€]
- μμ΄μ΄ κ³μ κ°μνλ κ²½μ° ->
dp[2][νμ¬ μΈλ±μ€]
λ‘ λ§λ€μ΄ κ°μ κ³μ λΉκ΅ν΄ μν©λλ€.
μ΄λ, κ³μ μ¦κ°νκ±°λ κ°μνλ κ°μ max(νμ¬ μΈλ±μ€μ dp κ°, μ¦κ°νκ±°λ κ°μνλ λΆλΆμ dp κ° + 1)λ‘ κ³μ κ°±μ μ ν΄μ£Όλ©΄ λ©λλ€.
κ·Έλ¬λ μ¦κ°νλ€κ° κ°μλ‘ λ°λλ μμ΄μ κ²½μ°,
- νμ¬ μΈλ±μ€μμ κ³μ μ¦κ°νμ λμ κ²½μ°μ μ
- νμ¬ μΈλ±μ€κ° μ¦κ°νλ€κ° κ°μλ‘ λ³νλ€κ³ νμ λμ DP ν¬κΈ°λ₯Ό μλ₯Ό λΉκ΅νλ©° κ°±μ ν΄ μ€μΌ ν©λλ€.
#include <iostream>
#include <algorithm>
using namespace std;
int n, result;
int dp[3][1001];
int val[1001];
int main(void){
cin >> n;
for(int i=1;i<=n;i++){
cin >> val[i];
dp[0][i]=1;
dp[1][i]=1;
dp[2][i]=1;
}
for(int i=1; i<=n;i++){
for(int j=1; j<i;j++){
if(val[j]<val[i]){
dp[0][i]= max(dp[0][i], dp[0][j]+1 );
}
if(val[j]>val[i]){
dp[2][i] = max(dp[2][i],dp[2][j]+1);
dp[1][i] = max(dp[1][i],dp[0][j]+1);
dp[1][i] = max(dp[1][i],dp[1][j]+1);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1; j<3;j++){
result = max(result,dp[j][i]);
}
}
cout << result << '\n';
return 0;
}
'Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] μ¬μ΄ν΄ κ²μ(20040) (0) | 2022.03.14 |
---|---|
[BOJ] νλ Έμ΄ ν μ΄λ μμ(11729) (0) | 2022.03.13 |
[BOJ] Thread Knots(17976) (0) | 2022.03.13 |
[BOJ] LCS(9251) (0) | 2022.03.12 |
[BOJ] κ³λ¨ μ€λ₯΄κΈ°(2579) (0) | 2022.03.12 |