hdu1798

本文讨论了贪心算法在任务安排问题中的应用,通过优先处理扣分最多的任务来最小化分数损失,并详细解释了算法实现过程及其实验结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贪心

要想减少的分数最小,所以要在最后完成时间之前把扣分最多的要完成,所以按照扣除分数的大小排序,这里有个问题,就是排完序后面的规定时间可能小于前边的,选择前边作业的完成时间要尽量大,为后面的作业留下时间。






#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int time[1010];
struct op
{
	int t,cont;
}p[1010];
int cmp(const void *a,const void *b)
{
	struct op *c,*d;
	c=(struct op *)a;
	d=(struct op *)b;
	if(c->cont!=d->cont)
		return d->cont-c->cont;
	else return c->t-d->t; 
}
int main()
{
	int i,j,sum,n,t;
	scanf("%d",&t);
	while(t--)
	{
         scanf("%d",&n);
		 for(i=0;i<n;i++)
			 scanf("%d",&p[i].t);
		 for(i=0;i<n;i++)
			 scanf("%d",&p[i].cont);
		 qsort(p,n,sizeof(p[0]),cmp);
		 memset(time,0,sizeof(time));
		 sum=0;
		 for(i=0;i<n;i++)
		 {
			 for(j=p[i].t;j>=1;j--)
			 {
				 if(time[j]==0)
				 {
					 time[j]=1;
					 break;
				 }
			 }
			 if(j==0)
				 sum+=p[i].cont;
		 }
		 printf("%d\n",sum);
	}
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值