백준 BOJ 전깃줄 C++
1) DP를 이용한 LIS (최장 증가 부분 수열, Longest increasing subsequence)
2) LIS를 복습 할 수 있었던 문제. 최근까지 헷갈렸는데 이번에 확실히 정리!
3) 이 문제의 output은 LIS에 포함되지 않는 것을 출력해야 함.
/**
* 200522
* BOJ 2565 전깃줄
* LIS 최장 증가 부분 수열
* */
#include <iostream>
#include <algorithm>
using namespace std;
int N;
pair<int,int> arr[105];
int mxLen[105];
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> N;
for(int i=0; i<N; i++)
cin >> arr[i].first >> arr[i].second;
sort(arr, arr+N);
// LIS (Longest Increasing Subsequence)
for(int i=0; i<N; i++){
mxLen[i] = 1;
for(int j=0; j<i; j++){
if(arr[j].second < arr[i].second){
mxLen[i] = max(mxLen[j]+1, mxLen[i]);
}
}
}
int ans = -1;
for(int i=0; i<N; i++)
ans = max(ans, mxLen[i]);
// LIS에 포함되지 않는 것 갯수 출력
cout << N-ans << '\n';
return 0;
}
'BOJ' 카테고리의 다른 글
BOJ 1600 말이 되고픈 원숭이 (0) | 2020.06.05 |
---|---|
BOJ 1986 체스 (0) | 2020.06.05 |
BOJ 1461 도서관 (0) | 2020.05.21 |
BOJ 1517 버블 소트 (0) | 2020.05.19 |
BOJ 14442 벽 부수고 이동하기 2 (0) | 2020.05.19 |