http://acm.hdu.edu.cn/showproblem.php?pid=1789
贪心,按价值从大到小排序,然后尽可能的安排到截止时间
View Code
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct L{ int a,b; }L; L kk[1100]; int cmp(const void*a,const void*b) { L*c=(L*)a; L*d=(L*)b; if(c->b==d->b) return c->a-d->a; return d->b-c->b; } int main() { int t,n,i,j; int time,dead; int day[1100]; scanf("%d",&t); while(t--) { memset(day,0,sizeof(day)); time=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&kk[i].a); for(i=0;i<n;i++) scanf("%d",&kk[i].b); qsort(kk,n,sizeof(L),cmp); for(i=0;i<n;i++) { dead=kk[i].a; for(j=dead-1;j>=0;j--) if(!day[j]) { day[j]=1; break; } if(j==-1)time+=kk[i].b; } printf("%d\n",time); } return 0; }