您的位置:首页 > 大数据 > 人工智能

hdu1789 Doing Homework again (贪心)

2013-08-25 12:35 295 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1789

题解:贪心,reduced score最大最先完成

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 1002

struct node
{
int deadline,score;
}hwork[MAXN];

int cmp(const void *x,const void *y)
{
struct node *a=(struct node *)x;
struct node *b=(struct node *)y;
return b->score-a->score;//从大到小排序,reduced score最大最先完成
}

int main()
{
int test,i,j,n,sum;
int flag[MAXN];
scanf("%d",&test);
while(test--)
{
scanf("%d",&n);
sum=0;
memset(flag,0,sizeof(flag));
for(i=0;i<n;++i)
scanf("%d",&hwork[i].deadline);
for(i=0;i<n;++i)
scanf("%d",&hwork[i].score);
qsort(hwork,n,sizeof(hwork[0]),cmp);
for(i=0;i<n;++i)
{
for(j=hwork[i].deadline;j>0;--j)
{//从deadline往前搜,如果有一天未被占用,则完成此作业,否则放弃
if(flag[j]==0)
{
flag[j]=1;
break;
}
}
if(j==0)//此作业未能完成
sum+=hwork[i].score;
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: