728x90
2565번: 전깃줄
첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 위치의 번호가 차례로 주어진다. 위치의 번호는 500 이하의 자연수이고, 같은 위치에 두 개 이상의 전깃줄이 연결될 수 없다.
www.acmicpc.net
왼쪽 전봇대 번호를 기준으로 오름차순 정렬한 후 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 |