Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 뱀과사다리게임
- 바이토닉 수열
- 4134번
- 그리기 연산
- BFS
- unrealengine
- WinAPI
- 백준
- 루트서명
- 백준 24444 c++
- 2d 박스충돌
- Unreal
- 2075번
- dx12 정리
- 랜더링 파이프라인
- 다익스트라
- 11286번
- 2565번
- DirectX12
- 다음소수
- dx12
- lis응용
- 24779
- 백준 c++ 24479번
- Perforce
- C++
- 드래곤플라이트 모작
- 백준 1260 c++
- 애니메이션
- directx12 그리기 연산2
Archives
- Today
- Total
game-1 님의 블로그
[백준] 2565번 C++ 전깃줄 본문




문제:https://www.acmicpc.net/problem/2565
풀이)
이 문제는 전깃줄이 겹치는 안된다는 점에서 해결법을 찾을 수 있다.
전깃줄이 겹치지 않는 상태에서 없애야하는 전깃줄의 최소개수를 구하려면
전깃줄이 최대가 되는 상태를 구하면 된다. 따라서 오른쪽 전봇대를 보면,
1->8
3->9
2->2
4->1
6->4
10->10
9->7
7->6
이것을 순서대로보면 {8,2,9,1,4,6,7,10}이 되며 여기서 증가하는 수열이 가장 긴 것을 고르면 {1,4,6,7,10}이된다.
따라서 총 전선개수 8개에서 전선이 최대일때의 개수 5를 빼주면
없애야하는 전깃줄의 최소개수를 구할 수 있다.
코드)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(501,0);
vector<int> v2;
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x >> y;
v[x] = y;
}
for (int i = 0; i < 501; ++i) {
if (v[i] != 0) {
v2.push_back(v[i]);
}
}
vector<int> lis(n,1);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (v2[j] < v2[i]) {
lis[i] = max(lis[i], lis[j] + 1);
}
}
}
int max_cnt = *max_element(lis.begin(), lis.end());
cout << n - max_cnt;
}

'백준 문제풀이' 카테고리의 다른 글
| [백준] 11725번 C++ 트리의 부모 찾기 (0) | 2025.01.21 |
|---|---|
| [백준] 3273번 두 수의 합 C++ (1) | 2025.01.18 |
| [백준] C++ 16928번 뱀과 사다리 게임 (1) | 2025.01.16 |
| [백준] C++ 2805번 나무자르기 (1) | 2025.01.14 |
| [백준] C++ 1697번:숨바꼭질 (1) | 2025.01.13 |