|  
 
 
hdu 1789 贪心算法源代码 此题大致思路,既然要计算最少扣多少分,就要在最后时间之前把扣分最多的作业先安排了。如果扣分一样多的话,那必然要把时间比较紧的先安排了。所以先按扣分的高低,由高向低排序,如果两门课扣分相同就按他们的结束时间由低向高排序!然后安排即可! 
 [cpp] view plaincopyprint? 01.#include<stdio.h>    02.#include<stdlib.h>    03.#include<string.h>    04.#define N 1000    05.int f[N+5];   06.struct T   07.{   08. int deadline;   09. int score;   10.}homework[N+5];   11.int cmp(const void*a,const void*b)   12.{   13. if((*(struct T*)a).score!=(*(struct T*)b).score)   14.  return (*(struct T*)b).score-(*(struct T*)a).score;  毕业论文  15. else   16.  return (*(struct T*)a).deadline-(*(struct T*)b).deadline;   17.}   18.int main()   19.{   20. int C,n,i,j,sum;   21. scanf("%d",&C);   22. while(C--)   23. {   24.  memset(f,0,sizeof(f));   25.  scanf("%d",&n);   26.  for(i=0;i<n;i++)   27.   scanf("%d",&homework[i].deadline);   28.  for(i=0;i<n;i++)   29.   scanf("%d",&homework[i].score);   30.  qsort(homework,n,sizeof(homework[0]),cmp);   31.  for(i=0,sum=0;i<n;i++)   32.  {   33.   for(j=homework[i].deadline;j>0;j--)          //从最后的期限开始考虑前几天有没有被安排    34.   {   35.    if(f[j]==0)   36.    {   37.     f[j]=1;break;   38.    }   39.   }   40.   if(j==0)                                                    //如果一直到结束都没有空余时间,最后只能扣分    41.    sum+=homework[i].score;   42.  }   43.  printf("%d\n",sum);   44. }   45. return 0;   46.}   
 |