给定作业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;
}