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;

}

你可能感兴趣的:(HDU)