낭만 IT

반응형

문제 출처

한국정보올림피아드 지역본선 2007 초등부 4번

문제 주소

백준 2565번 전깃줄

 

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;
}

백준 2565번 전깃줄 (C)

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band