zoukankan      html  css  js  c++  java
  • UVA 10020 Minimal coverage

    UVA_10020

        这个是刘汝佳白书上的例题,贪心策略就是按左端点对区间排序后依次扫描,在覆盖当前指定点的前提下使右端尽可能覆盖更大的区域。具体的思路可以参考刘汝佳白书的P154

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int q[5010],r[100010],L[100010],R[100010];
    int cmp(const void *_p,const void *_q)
    {
    int *p=(int *)_p;
    int *q=(int *)_q;
    return L[*p]-L[*q];
    }
    int main()
    {
    int i,j,k,n,N,M,t,tt,a,b,rear,ok;
    scanf("%d",&t);
    for(tt=0;tt<t;tt++)
    {
    scanf("%d",&M);
    N=0;
    while(1)
    {
    scanf("%d%d",&L[N],&R[N]);
    if(!L[N]&&!R[N])
    break;
    N++;
    }
    for(i=0;i<N;i++)
    r[i]=i;
    qsort(r,N,sizeof(r[0]),cmp);
    a=b=rear=0;
    ok=1;
    for(i=0;i<=N;i++)
    {
    if(b>=M)
    {
    rear++;
    break;
    }
    if(i==N)
    break;
    if(L[r[i]]>a)
    {
    if(L[r[i]]>b)
    {
    ok=0;
    break;
    }
    a=b;
    rear++;
    if(R[r[i]]>b)
    {
    b=R[r[i]];
    q[rear]=r[i];
    }
    }
    else if(R[r[i]]>b)
    {
    b=R[r[i]];
    q[rear]=r[i];
    }
    }
    if(i==N&&b<M)
    ok=0;
    if(tt)
    printf("\n");
    if(!ok)
    printf("0\n");
    else
    {
    printf("%d\n",rear);
    for(i=0;i<rear;i++)
    printf("%d %d\n",L[q[i]],R[q[i]]);
    }
    }
    return 0;
    }


  • 相关阅读:
    沉默
    抱冰握火
    数据库原理-SQL查询语句
    简单算法的实现——集合
    团队总结
    个人作业----项目测试
    团队项目-Beta冲刺
    团队项目-Alpha版本发布1
    团队项目-----系统设计 认真不马虎队
    团队项目----需求分析 认真不马虎队
  • 原文地址:https://www.cnblogs.com/staginner/p/2186047.html
Copyright © 2011-2022 走看看