Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 수학
- 트리
- 시뮬레이션
- ue5
- 그래프
- 재귀
- VR
- 다익스트라
- 정렬
- 누적 합
- Team Fortress 2
- XR Interaction Toolkit
- 구현
- 스택
- 백트래킹
- DFS
- BFS
- 알고리즘
- 유니온 파인드
- 백준
- 브루트포스
- 유니티
- c++
- 투 포인터
- 그리디 알고리즘
- 우선순위 큐
- 다이나믹 프로그래밍
- Unreal Engine 5
- 자료구조
- 문자열
Archives
- Today
- Total
1일1알
백준 11568번 민균이의 계략 C++ 본문
문제를 한줄로 요약하자면 가장 긴 증가하는 부분 수열을 구하는 것이다.
다이나믹 프로그래밍으로 해결할 수 있는 문제이다.
처음에 수열의 길이를 저장하는 dp테이블을 모두 1로 초기화 시킨다. (자신만 있을 경우 수열의 길이는 1)
원소들을 처음부터 검사하면서 자신의 앞에 있는 모든 원소들을 비교하다가 만약 자신보다 값이 작은 값을 찾으면 자신이 그 수열에 포함된다면 증가하는 수열의 길이가 늘어나는 것이기 때문에 찾은 값의 수열의 길이 중 가장 큰 값을 저장한다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
vector<int> v(n);
vector<int> dp(n, 1);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
dp[0] = 1;
int ans = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (v[i] > v[j]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
ans = max(ans, dp[i]);
}
cout << ans;
};
'알고리즘' 카테고리의 다른 글
백준 15662번 톱니바퀴 (2) C++ (0) | 2021.12.06 |
---|---|
백준 2002번 추월 C++ (0) | 2021.12.05 |
백준 1342번 행운의 문자열 C++ (0) | 2021.12.03 |
백준 2410번 2의 멱수의 합 C++ (0) | 2021.12.02 |
백준 15900번 나무 탈출 C++ (0) | 2021.12.01 |