알고리즘 문제/BOJ
2565번 전깃줄
parkit
2018. 11. 28. 21:36
728x90
반응형
LIS 알고리즘이다.
관련 문제를 더 풀어보자.
2565번 전깃줄 : https://www.acmicpc.net/problem/2565
LIS 알고리즘 : https://www.acmicpc.net/problem/tag/LIS
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <cstring> #include <string> #include <math.h> #include <algorithm> #include <map> using namespace std; bool cmp(const pair<int, int> &a, const pair<int, int> &b) { return a.first < b.first; } int main(void) { int A = 0, B = 0, N = 0, MAX = 0; int dp[501] = { 0, }; memset(dp, 0, sizeof(dp)); vector<pair<int, int> > v; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d %d", &A, &B); v.push_back({ A,B }); } sort(v.begin(), v.end(), cmp); // sort(v.begin(), v.end()); 라고 써도 된다. // default는 first 기준으로 오름차순 정렬 for (int i = 0; i < N; i++) { dp[i] = 1; for (int j = 0; j < i; j++) { if (v.at(i).second > v.at(j).second && dp[j] + 1 > dp[i]) { dp[i] = dp[j] + 1; } } MAX = max(MAX, dp[i]); } MAX = N - MAX; printf("%d\n", MAX); return 0; } | cs |
728x90
반응형