题意:有n件商品,告诉其销售利润和销售截止日期,问怎么卖使利润最大
解题思路:典型的贪心算法,定义一个结构体数组,内存利润和时间,按利润从大到小进行排序,若利润相同就按时间从大到小进行排序。若该天已被占用,则向前寻找未被占用的日期,直至日期为0。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=10010;
struct node
{
int pro;
int time;
};
node product[maxn];
int day[maxn];
bool cmp(node a,node b)
{
if(a.pro==b.pro)
return a.time>b.time;
else
return a.pro>b.pro;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(day,0,sizeof(day));
for(int i=1;i<=n;i++)
scanf("%d%d",&product[i].pro,&product[i].time);
sort(product+1,product+n+1,cmp);
int sum=0;
for(int i=1;i<=n;i++)
{
if(day[product[i].time]==0)
{
sum+=product[i].pro;
day[product[i].time]=1;
}
else
{
while(day[product[i].time]!=0)
{
product[i].time--;
}
if(product[i].time!=0)
{
sum+=product[i].pro;
day[product[i].time]=1;
}
}
}
printf("%d\n",sum);
}
return 0;
}