반응형
문제 출처
한국정보올림피아드 지역본선 2007 초등부 4번
문제 주소
2565번: 전깃줄
첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 위치의 번호가 차례로 주어진다. 위치의 번호는 500 이하의 자연수이고, 같은 위치에 두 개 이상의 전깃줄이 연결될 수 없다.
www.acmicpc.net
알고리즘
DP
힌트
서로 교차하지 않는 전깃줄의 최대 개수를 구한다.
문제풀이
서로 교차하지 않는 전깃줄의 최대 개수를 구하기 위해선 한 쪽 전봇대 기준으로 정렬을 한 뒤 나머지 전봇대의 번호에서 가장 긴 증가하는 수열을 구하면 된다.
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct dot{
int x,y;
}dot;
dot in[101];
int dp[101];
int cmp(dot a, dot b){
return a.x<b.x;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>in[i].x>>in[i].y;
sort(in+1,in+n+1,cmp);
int ans=0;
for(int i=0;i<=n;i++){
for(int j=0;j<i;j++){
if(in[i].y>in[j].y){
dp[i]=max(dp[i],dp[j]+1);
}
}
}
cout<<n-ans;
}
반응형
'Problem Solve > Dynamic Programming' 카테고리의 다른 글
[백준] 9251번 LSC (C) (0) | 2020.04.21 |
---|---|
[백준] 11054번 가장 긴 바이토닉 부분 수열 (C) (0) | 2020.04.09 |
[백준] 11053번 가장 긴 증가하는 부분 수열 (C) (0) | 2020.04.06 |
[백준] 2156번 포도주 시식 (C) (0) | 2020.03.30 |
[백준] 10844번 쉬운 계산 수 (C) (0) | 2020.03.30 |