hdu 2037 贪心+结构体排序(备战LQB)

来源:互联网 发布:淘宝美工网上接单 编辑:程序博客网 时间:2024/05/03 22:58

题意是找一堆时间点里面,不重合的时间段的最多个数。

经典的DP,让人想起刚刚入门时候的奶牛题。

从后往前的动归,这段核心代码写糊了,按教程理解了好久。


代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>struct Time{    int star;    int end;} time[101];int cmp(const void *va, const void *vb){    Time *a,*b;    a=(Time*)va;    b=(Time*)vb;    if(a->star > b->star)        return 1;    if(a->star < b->star)        return -1;    return 0;}int main(){    int n;    int ans[101];    while(scanf("%d", &n)!=EOF)    {        if(n==0)            break;        int max=0;        memset(ans,0,sizeof(ans));        for(int i=0; i<n; i++)            scanf("%d%d",&time[i].star,&time[i].end);        qsort(time, n, sizeof(Time),cmp);        //DP        for(int i=n-2; i >= 0; i--)        {            for(int j=i+1; j < n; j++)            {                         //i次后可看的         &&   除重复的情况                if(time[i].end <= time[j].star && ans[i] < ans[j]+1)                    ans[i]=ans[j]+1;                if(max < ans[i])                    max=ans[i];            }        }        printf("%d\n",max+1);//加上本身这一段    }    return 0;}


本题也可以用贪心来做。

0 0
原创粉丝点击