HDU 1789 Doing Homework again


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


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

贪心: 

对 score 进行 按 分数高低 排序  ,score 相同的 deadline 小的 排前面

对 score 进行遍历, 每次 都将 score 大的 安排在 对应的 deadline 那天, 

如果 那一天 被安排了作业, 则往前 寻找 空闲的 日子 ,如果 没有找到,则说明 这个作业不能完成 

这样  总的 reduce score 就是 最小的


*/
#include <stdio.h>
#include <string.h>
int deadline[1010],score[1010];
int sche[1010];
void swap(int max, int i)
{
	if(score[max] < score[i])
	{
		int temp = deadline[max];
		deadline[max] = deadline[i];
		deadline[i] = temp;
		temp = score[max];
		score[max] = score[i];
		score[i] = temp;
	}
	else if(deadline[max] > deadline[i])
	{
		int temp = deadline[max];
		deadline[max] = deadline[i];
		deadline[i] = temp;
		temp = score[max];
		score[max] = score[i];
		score[i] = temp;
	}
}
void mysort(int n)
{
	int i,j;
	for(i=0; i<n-1; i++)
	{
		for(j=1; j<n-i; j++)
		{
			if(score[j-1] <= score[j])
				swap(j-1,j);
		}
	}
}
int main()
{
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	int cas;
	scanf("%d",&cas);
	while(cas--)
	{
		memset(deadline,0,sizeof(deadline));
		memset(score,0,sizeof(score));
		memset(sche,0,sizeof(sche));
		int n,i;
		scanf("%d",&n);
		for(i=0; i<n; i++)
			scanf("%d",&deadline[i]);
		for(i=0; i<n; i++)
			scanf("%d",&score[i]);			
		mysort(n);
		int reduce = 0;
		for(i=0; i<n; i++)
		{
			int day = deadline[i]-1;  // 将deadline 对应到 数组 中的 0... 
			while(sche[day]!=0 && day >=0)
				day--;
			if(day < 0)
				reduce += score[i];
			else
				sche[day]=1;
		}
+		printf("%d\n",reduce);
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值