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


  • 相关阅读:
    当模型验证未通过时,获取未通过验证的属性
    在ASP.Net MVC中进行身份认证
    c#生成验证码
    HTTP与FTP状态码
    VUEX
    JS模块化
    Vue.JS入门下
    flex布局
    asp.net Web API
    JWT加密解密
  • 原文地址:https://www.cnblogs.com/staginner/p/2186047.html
Copyright © 2020-2023  润新知