每次贪价值最大的商品,把时间看作一个个的点,从最晚的时间往前没卖商品的时间点,找到就加上,做完为止
#include<stdio.h>
#include<algorithm>
using namespace std;
struct aaa{
int price,time;
};
int cmp(aaa a,aaa b){
return a.price>b.price;
}
int deal(int n){
int i,j,q[10000]={0},w,t,total=0,max=0;
aaa z[10000];
for(i=0;i<n;i++){
scanf("%d %d",&z[i].price,&z[i].time);
if(max<z[i].time) max=z[i].time;
}
sort(z,z+n,cmp);
/*for(i=0;i<n;i++)
printf("%d->%d ",z[i].price,z[i].time);
printf("\n--------------------------------------------\n");*/
for(i=0;i<n;i++){
w=z[i].time;
while(q[w]==1&&w>0) w--;
if(w==0) continue;
total+=z[i].price;
q[w]=1;
}
return total;
}
int main(){
int n,i,k=0,s[100];
//freopen("Supermarket.in","r",stdin);
while(scanf("%d",&n)!=EOF)
s[k++]=deal(n);
for(i=0;i<k;i++)
printf("%d\n",s[i]);
return 0;
}