728x90
반응형
2565번: 전깃줄
문제
https://www.acmicpc.net/problem/2565
2565번: 전깃줄
첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는
www.acmicpc.net
풀이
두 전봇대에 선이 겹치지 않게 가장 많이 연결할 수 있는 전깃줄의 수를 구하는 문제다. 두 전봇대를 A와 B라고 하면 A 전봇대의 연결되는 위치를 기준으로 오름차순으로 정렬한다. 그리고 B 전봇대에 연결되는 위치가 가장 긴 증가하는 부분 수열(LIS)이 되도록 구하면 연결 가능한 전선의 수를 알 수 있다. 전체 전깃줄의 수에서 연결 가능한 전선의 수의 최댓값을 빼면 답을 구할 수 있다.
위치의 범위가 500 이하이므로 dp로 해결할 수 있다. LIS는 아래 글을 읽어보면 이해할 수 있다.
[백준 / BOJ] C++ 11053 가장 긴 증가하는 부분 수열
11053번: 가장 긴 증가하는 부분 수열 문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
khyunx.tistory.com
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<pair<int, int>> v(n);
vector<int> dp(n, 1);
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
v[i] = {a, b};
}
sort(v.begin(), v.end());
for (int i = 0; i < n; i++)
for (int j = 0; j < i; j++)
if (v[j].second < v[i].second)
dp[i] = max(dp[i], dp[j] + 1);
cout << n - *max_element(dp.begin(), dp.end()) << '\n';
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 1149 RGB거리 (0) | 2023.02.11 |
---|---|
[백준 / BOJ] C++ 1145 적어도 대부분의 배수 (0) | 2023.02.11 |
[백준 / BOJ] C++ 11722 가장 긴 감소하는 부분 수열 (0) | 2023.02.09 |
[백준 / BOJ] C++ 11053 가장 긴 증가하는 부분 수열 (0) | 2023.02.09 |
[백준 / BOJ] C++ 1124 언더프라임 (0) | 2023.02.08 |