hdu4211

本文介绍了一种使用贪心算法解决特定任务调度问题的方法。通过对任务进行排序,确保了按照a/b比率递增的方式完成任务,最终实现了在有限时间内最小化总时间消耗的目标。

             首先看到这道题就想到贪心,然后就是想该如何贪心了。对于(a1,b1)和(a2,b2),假设当前已用时t0,所以

t0+b1*t0+a1+b2*(b1*t0+t0+a1)+a2<t0+b2*t0+a2+b1*(b2*t0+t0+a2)+a1,化简得a1*b2<a2*b1.

 

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int M=365*24*60*60;
struct task
{
	int a,b;
	bool operator<(const task &t)const
	{
		return double(a)/b<(double)t.a/t.b;
	}
}a[100005];

int main()
{
	int n;
	long long t;
	while(scanf("%d",&n),n)
	{
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&a[i].a,&a[i].b);
		}
		t=0;
		sort(a,a+n);
		for(int i=0;i<n;i++)
		{
			t=(t+t*a[i].b+a[i].a)%M;
		}
		printf("%I64d\n",t);
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值