贪心策略:让每一天都尽量交最多的钱
以滞纳金降序排列
定义一个bool数组判断某一天是否已交罚款,即是否已用过
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
struct d{
int t;
int m;
};
struct d a[105];
bool b[1005]={0};
bool cmp(d a1,d a2)
{
return a1.m>a2.m;
}
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].t>>a[i].m;
}
sort(a+1,a+n+1,cmp);
b[a[1].t]=1;
int i=2;
while(i<=n)
{
int g=a[i].t;
while(b[g]==1&&g>0)
{
g--;
}
if(g==0)
{
sum=sum+a[i].m;
}
else b[g]=1;
i++;
}
cout<<sum<<endl;
return 0;
}