[恢]hdu 1789

2011-12-19 08:22:18

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

题意:n个作业,第i个作业有个deadline[i],过了deadline才完成需要罚score[i]分。每个作业完成需要1天。问最少要被扣多少分。

mark:贪心orDP,that's a problem。想dp没YY出来。看了别人的思路,贪心水过。

代码:

# include <stdio.h>
# include <stdlib.h>
# include <string.h>


typedef struct node{
int dl, sc ;
}node ;
typedef node *pnode ;


node a[1010] ;
int flag[1010] ;

int min(int a, int b){return a<b?a:b ;}
int cmp(const void *a, const void *b)
{
pnode p = (pnode)a, q = (pnode)b ;
if (p->sc != q->sc) return q->sc - p->sc ;
return p->dl - q->dl ;
}


int main ()
{
int i, j, T ;
int cur, ans, n ;
scanf ("%d", &T) ;
while (T--)
{
scanf ("%d", &n) ;
for (i = 0 ; i < n ; i++)
{
scanf ("%d", &a[i].dl) ;
if (a[i].dl >1010)
a[i].dl = 1010 ;
}
for (i = 0 ; i < n ; i++)
scanf ("%d", &a[i].sc) ;
qsort(a, n, sizeof(node),cmp) ;
ans = 0 ;
memset (flag, 0, sizeof(flag)) ;
for (i = 0 ; i < n ;i++)
{
for (j = a[i].dl - 1 ; j >= 0 ; j--)
{
if (flag[j] == 0)
{
flag[j] = 1 ;
break ;
}
}
if (j == -1) ans += a[i].sc ;
}
printf ("%d\n", ans) ;
}
return 0 ;
}



posted @ 2012-01-06 22:25  Seraph2012  阅读(251)  评论(0编辑  收藏  举报