nyoj 236

C 를 묘사 할 때 나무 막대 가 있 는데 그들의 길이 와 품질 은 모두 알 고 있다. 한 기계 가 이런 나무 막대 기 를 처리 해 야 한다. 기계 가 작 동 할 때 한 단위 의 시간 이 필요 하 다. 만약 에 i + 1 개의 나무 막대 의 무게 와 길이 가 모두 i 가 처리 하 는 나무 막대 보다 크 면 시간 이 걸 리 지 않 을 것 이다. 그렇지 않 으 면 한 단위 의 시간 이 필요 하 다.서둘러 데 이 트 를 하 러 갔 기 때문에 C 샤 오 카 는 가장 짧 은 시간 안에 나무 막대 기 를 다 처리 하고 싶 었 다. 그 에 게 어떻게 해 야 하 는 지 알려 줄 수 있 습 니까?
입력 첫 줄 은 정수 T (1 < T < 1500) 로 입력 데이터 가 모두 T 그룹 임 을 나타 낸다.
각 조 의 테스트 데이터 의 첫 줄 은 하나의 정수 N (1 & lt; N & gt; = 5000) 으로 N 개의 나무 막대 가 있다 는 것 을 나타 낸다.다음 줄 은 각각 N 개의 나무 막대기 의 L, W (0 < L, W < = 10000) 를 입력 하고 빈 칸 으로 나 누 어 나무 막대기 의 길이 와 품질 을 표시 합 니 다.
출력 이 이 나무 막대 들 을 처리 하 는 가장 짧 은 시간.
샘플 입력 3
5
4 9 5 2 2 1 3 5 1 4
3
2 2 1 1 2 2
3
1 3 2 2 3 1
샘플 출력 2
1
3
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int l,w;
}no[5010];
int cmp(const void *a,const void *b)
{
    struct node *c=(node*)a;
    struct node *d=(node*)b;
    if(c->l!=d->l) return c->l-d->l;
    else return c->w-d->w;
}
int main()
{
    int t,n,i,j,num,temp;
    scanf("%d",&t);
    while(t--){
        num=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%d",&no[i].l,&no[i].w);
        qsort(no,n,sizeof(no[0]),cmp);
        for(i=0;i<n;i++){
            if(no[i].w){
                num++;
                temp=no[i].w;
                no[i].w=0;
                for(j=i+1;j<n;++j){
                    if(no[j].w>=temp){
                        temp=no[j].w;
                        no[j].w=0;
                    }
                }
            }
        }
        printf("%d
",num); } return 0; }

좋은 웹페이지 즐겨찾기