带时限作业排序(贪心)

给定作业d的最迟完成时间,以及完成该作业所受的收益p

该算法时间复杂度大约是O(n*n)

程序代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct data{
	int d;
	int p;
}a[110];
bool book[110];
int cmp(data x,data y);
int main()
{
	int n,i,j,sum;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d%d",&a[i].d,&a[i].p);
	sort(a,a+n,cmp);
	sum=0;
	for(i=0;i<n;i++)
	{
		if(book[a[i].d]==1)
		{
			for(j=a[i].d;j>0;j--)
				if(book[j]==0)
					break;
			if(j>0)
			{
				sum+=a[i].p;
				book[j]=1;
			}
		}
		else
		{
			sum+=a[i].p;
			book[a[i].d]=1;
		} 
	}
	printf("%d\n",sum);
	return 0;
}
int cmp(data x,data y)
{
	return x.p>y.p;
}

 

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页