对该实例而言,得分最大的作业完成方案为花费4天时间依次完成题目2,6,3,7。得分为15。
【输入形式】
输入数据第一行为一个整数n (0 <= n <= 10000), 表示题目数目
之后n行各有两个整数, 第i行为 pi, di (1 <= pi, di <= 10000),分别表示第i个题目的分数和截止时间
【输出形式】
【样例输入】
4 50 2 10 1 20 2 30 1
【样例输出】
80
C++代码实现如下:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct node
{
long p,d;
bool operator < (const node& a)const
{
return p>a.p;
}
};
long n;
node a[10000];
long vis [10000];
int main()
{
cin>>n;
for(long i=0;i<n;i++)
{
cin>>a[i].p>>a[i].d;
}
sort(a,a+n);
memset(vis,0,sizeof(vis));
long sum=0;
for(long i=0;i<n;i++)
{
for(long j=a[i].d;j>=1;j--)
{
if(!vis[j])
{
vis[j]=1;
sum+=a[i].p;
break;
}
}
}
cout<<sum<<endl;
}