程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1789 貪心算法

hdu 1789 貪心算法

編輯:C++入門知識

  此題大致思路,既然要計算最少扣多少分,就要在最後時間之前把扣分最多的作業先安排了。如果扣分一樣多的話,那必然要把時間比較緊的先安排了。所以先按扣分的高低,由高向低排序,如果兩門課扣分相同就按他們的結束時間由低向高排序!然後安排即可! [cpp]   #include<stdio.h>   #include<stdlib.h>   #include<string.h>   #define N 1000   int f[N+5];   struct T   {    int deadline;    int score;   }homework[N+5];   int cmp(const void*a,const void*b)   {    if((*(struct T*)a).score!=(*(struct T*)b).score)     return (*(struct T*)b).score-(*(struct T*)a).score;    else     return (*(struct T*)a).deadline-(*(struct T*)b).deadline;   }   int main()   {    int C,n,i,j,sum;    scanf("%d",&C);    while(C--)    {     memset(f,0,sizeof(f));     scanf("%d",&n);     for(i=0;i<n;i++)      scanf("%d",&homework[i].deadline);     for(i=0;i<n;i++)      scanf("%d",&homework[i].score);     qsort(homework,n,sizeof(homework[0]),cmp);     for(i=0,sum=0;i<n;i++)     {      for(j=homework[i].deadline;j>0;j--)          //從最後的期限開始考慮前幾天有沒有被安排      {       if(f[j]==0)       {        f[j]=1;break;       }      }      if(j==0)                                                    //如果一直到結束都沒有空余時間,最後只能扣分       sum+=homework[i].score;     }     printf("%d\n",sum);    }    return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved