标签:
3 3 10 3 5 3 1 3 1 6 3 2 1 3 7 1 3 4 2 6 1 4 7 2 6 4 5 3 4
0 3 5
将数据存入优先队列,优先队列出队顺序按照分数从大到小,设置数组vis[]来标记对应日期是否有空闲时间,
若无空闲时间则必须舍弃当下分数:
#include<stdio.h>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
int time;
int score;
friend bool operator < (node a,node b)
{
return a.score<b.score;
}
};
int main()
{
int n,m,j,i,t;
int vis[2100];
while(scanf("%d",&t)!=EOF)
{
memset(vis,0,sizeof(vis));
priority_queue<node>q;
node x;
for(i=0;i<t;i++)
{
scanf("%d%d",&n,&m);
x.time=n;
x.score=m;
q.push(x);
}
int sum=0;
for(i=0;i<t;i++)
{
x=q.top();
for(j=x.time;j>=1;j--)
{
if(vis[j]==0)
{
vis[j]=1;
break;
}
}
if(j==0)
sum+=x.score;
q.pop();
}
printf("%d\n",sum);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4682054.html