n个商品,每个商品有一个保质期和利润,每个需要一天卖出,最终获得的利润最大是多少。
价格从大到小排序,看商品i的保质期之前是不是有一天是空闲的,如果是那就把它加入。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int w,d;
}a[13023];
int cmp(node q,node w)
{
return q.w>w.w;
}
int vis[12000];
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)scanf("%d%d",&a[i].w,&a[i].d);
sort(a,a+n,cmp);
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=a[i].d;j>=1;j--)
if(vis[j]==0)
{
vis[j]=1;ans+=a[i].w;break;
}
}
printf("%d\n",ans);
}
return 0;
}