http://acm.hdu.edu.cn/showproblem.php?pid=1789

贪心,按价值从大到小排序,然后尽可能的安排到截止时间

View Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct L{
    int a,b;
}L;
L kk[1100];
int cmp(const void*a,const void*b)
{
    L*c=(L*)a;
    L*d=(L*)b;
    if(c->b==d->b)
        return c->a-d->a;
    return d->b-c->b; 
}
int main()
{
    int t,n,i,j;
    int time,dead;
    int day[1100];
    scanf("%d",&t);
    while(t--)
    {
        memset(day,0,sizeof(day));
        time=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&kk[i].a);
        for(i=0;i<n;i++)
            scanf("%d",&kk[i].b);
        qsort(kk,n,sizeof(L),cmp);
        for(i=0;i<n;i++)
        {
            dead=kk[i].a;
            for(j=dead-1;j>=0;j--)
                if(!day[j])
                {
                    day[j]=1;
                    break;
                }
            if(j==-1)time+=kk[i].b;
        }
        printf("%d\n",time);
    }
    return 0;
}