Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1789

贪心

先安排分数大的作业,设它的期限为t,若第t天没被安排,则安排在第t天,否则往前找空闲时间,即t-1,t-2,t-3......1,直到找到第i天空闲,则安排在第i天,若前t天都被安排了,没有空闲时间,则这个作业无法完成

另外当t>n时,可令t=n,n天足够完成所有作业了

 

我的代码
 1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 struct work
5 {
6 int s,t;
7 }a[1010];
8 int flag[1010];
9 int cmp(const void *a,const void *b)
10 {
11 return ((work*)b)->s - ((work*)a)->s;
12 }
13 int main()
14 {
15 int T;
16 scanf("%d",&T);
17 while (T--)
18 {
19 int n,i,ans=0;
20 scanf("%d",&n);
21 for (i=1;i<=n;i++) scanf("%d",&a[i].t);
22 for (i=1;i<=n;i++) scanf("%d",&a[i].s);
23 qsort(a+1,n,sizeof(a[0]),cmp);
24 memset(flag,0,sizeof(flag));
25 for (i=1;i<=n;i++)
26 {
27 int t = a[i].t>n ? n : a[i].t;
28 while (flag[t]) t--;
29 if (t>0) flag[t]=1;
30 else ans+=a[i].s;
31 }
32 printf("%d\n",ans);
33 }
34 }

 

posted on 2011-11-29 18:36  Qiuqiqiu  阅读(290)  评论(0编辑  收藏  举报