728x90
왼쪽 전봇대 번호를 기준으로 오름차순 정렬한 후 LIS를 구하고 총 전깃줄 개수에서 LIS를 빼주었다.
#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<int, int>> line(n);
for (int i = 0; i < n; i++) {
int from, to;
cin >> from >> to;
line[i] = make_pair(from, to);
}
sort(line.begin(), line.end());
vector<int> dp(n);
dp[0] = 1;
for (int i = 1; i < n; i++) {
int maxLength = 0;
for (int j = 0; j < i; j++) {
if (line[i].second > line[j].second && dp[j] > maxLength)
maxLength = dp[j];
}
dp[i] = maxLength + 1;
}
int lis = 0;
for (int i = 0; i < n; i++) {
if (dp[i] > lis) lis = dp[i];
}
cout << n - lis;
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 4963번 섬의 개수 (0) | 2020.02.06 |
---|---|
[백준] 1912번 연속합 (0) | 2020.02.06 |
[백준] 11054번 가장 긴 바이토닉 부분 수열 (0) | 2020.02.06 |
[백준] 11651번 좌표 정렬하기 2 (0) | 2020.02.06 |
[백준] 2583번 영역 구하기 (0) | 2020.02.06 |