标签:des style blog http color java os io
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6538 Accepted Submission(s): 3900
贪心.
贪心策略:按扣分降序排序,对每个作业进行判断,是否能够在限定的最后一天完成,如果限定的最后一天已经有作业要完成,(如第一个案例:先判断扣10分的作业能不能在第三天完成,此时第三天没有安排作业. 那么就安排进去.接下来再判断第二个作业 也就是扣分为5的作业,第三天已经安排了扣分为10的作业,所以第三天不能再安排作业。往前找,第二天没有安排作业,所以安排到第二天。以此类推)那么继续往前寻找,若前面都不能安排此作业,那么就算这个作业不能完成.
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 #define MAX 1001 7 struct node 8 { 9 int day; 10 int score; 11 }; 12 struct node num[MAX]; 13 bool flag[MAX]; 14 int n,sum; 15 bool cmp(struct node x,struct node y) 16 { 17 if(x.score==y.score) return x.day<y.day; 18 return x.score>y.score; 19 } 20 void out() 21 { 22 for(int i=1;i<=n;i++) 23 cout<<flag[i]<<" "; 24 cout<<endl; 25 } 26 void init() 27 { 28 memset(num,0,sizeof(num)); 29 memset(flag,true,sizeof(flag)); 30 sum=0; 31 } 32 void read() 33 { 34 int i; 35 scanf("%d",&n); 36 for(i=0;i<n;i++) 37 scanf("%d",&num[i].day); 38 for(i=0;i<n;i++) 39 { 40 scanf("%d",&num[i].score); 41 sum+=num[i].score; 42 } 43 sort(num,num+n,cmp); 44 } 45 void cal() 46 { 47 int ans=sum; 48 int i,j; 49 for(i=0;i<n;++i) 50 { 51 if(flag[num[i].day]) 52 { 53 ans-=num[i].score; 54 flag[num[i].day]=!flag[num[i].day]; 55 } 56 else 57 { 58 for(j=num[i].day-1;j>=1;j--) 59 if(flag[j]) 60 { 61 flag[j]=!flag[j]; 62 ans-=num[i].score; 63 break; 64 } 65 } 66 } 67 printf("%d\n",ans); 68 } 69 void solve() 70 { 71 init(); 72 read(); 73 cal(); 74 } 75 76 int main() 77 { 78 int t; 79 scanf("%d",&t); 80 while(t--) 81 { 82 solve(); 83 } 84 return 0; 85 }
Hdu 1789 Doing Homework again,布布扣,bubuko.com
标签:des style blog http color java os io
原文地址:http://www.cnblogs.com/By-ruoyu/p/3905568.html