http://poj.org/problem?id=1456
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct nod
{
int a;
int d;
};
bool cmp(nod x,nod y)
{
return x.a>y.a;
}
int main()
{
nod aa[10005];
int n;
while(cin>>n)
{ int tt[10005]={0};
for(int i=0;i<n;i++)
{
cin>>aa[i].a>>aa[i].d;
}
int sum=0;
sort(aa,aa+n,cmp);
for(int j=0;j<n;j++)
{if(tt[aa[j].d]==0)
{
sum+=aa[j].a;
tt[aa[j].d]=1;
}
else//////排除比利益较大但天数已经被标记的成员。
{
for(int i=aa[j].d;i>0;i--)
{if(tt[i]==0)
{
sum+=aa[j].a;
tt[i]=1;
break;
}
}
}
}
cout<<sum<<endl;
}
return 0;
}