https://www.acmicpc.net/problem/11053
1. 의사코드
1. dp[i]를 정의하고
2. 채워나가면서 규칙(점화식)을 발견하라.
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int n,a[1004],dp[1004];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
//dp[i] : i포함시 최장수열의 길이
// == 이전애들중 나보다작은애들중 제일큰값+1
dp[0] = 1;
for (int i = 1; i < n; ++i) {
int mx = 0;
for (int j = 0; j < i; ++j) {
if (a[i] > a[j])
mx = max(mx, dp[j]);
}
dp[i] = mx + 1;
}
//for (int i = 0; i < n; ++i) cout << dp[i] << " ";
cout << *max_element(dp, dp + 1004);
return 0;
}
'Algorithm > dp' 카테고리의 다른 글
백준 11052 카드구매하기 c++ //dp 관찰방법 (0) | 2024.04.15 |
---|---|
백준 1912 연속합 c++ // dp, 규칙발견, ox를 그때그때 선택해버리기 (0) | 2024.04.15 |
백준 1520 내리막길 c++ // top-down dp, dfsDp, 상하좌우탐색 문제점 (0) | 2024.04.10 |
백준 1890 점프 c++ // dp, 배열순회dp, dp[next] += dp[cur] (0) | 2024.04.08 |
백준 10844 쉬운계단수 c++ // dp (0) | 2024.04.08 |