hdu 1789

代码如下:

#include"stdio.h"
#include"string.h"
#include"stdlib.h"

int flag[1005];
struct node
{
    int date,score;
}x[1005];

int cmp(const void *a,const void *b)
{
    node *aa=(node*)a,*bb=(node*)b;
    if(aa->score!=bb->score)
        return bb->score-aa->score;
    else
        return aa->date-bb->date;
}

int main( )
{
    int t,n,i,j,sum;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&x[i].date);
        for(i=0;i<n;i++)
            scanf("%d",&x[i].score);
        qsort(x,n,sizeof(node),cmp);//先按扣分权重排序,然后按日期排;
        memset(flag,0,sizeof(flag));
        sum=0;
        for(i=0;i<n;i++)
        {
            for(j=x[i].date;j>0;j--)
            {
                if(flag[j]==0)
                {flag[j]=1;break;}//从最后的期限开始考虑前几天有没有被安排 
            } //如果一直到结束都没有空余时间,最后只能扣分 
            if(j==0)
                sum+=x[i].score;
        }
        printf("%d\n",sum);
    }
    return 0;
}
posted @ 2012-05-20 20:28  朝圣の路  阅读(208)  评论(0编辑  收藏  举报