码迷,mamicode.com
首页 > 编程语言 > 详细

南阳oj 757 期末考试【优先队列+sort排序】

时间:2015-07-28 18:32:51      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

描述
马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没
交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗?
输入
输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数。
(以文件结尾)
输出
输出扣除的最小分数。
样例输入
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


#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
struct exam
{
	int gra,date;	
}arr[1002];
bool cmp(exam a,exam b)
{
	if(a.date==b.date) return a.gra<b.gra;
	return a.date<b.date;
}
exam temp;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
	int t,n,i;
	
	while(~scanf("%d",&t))
	{
		while(!q.empty()) q.pop();//队列初始化 
		
		for(i=0;i<t;++i)
		{
			scanf("%d%d",&arr[i].date,&arr[i].gra);			
		}
		sort(arr,arr+t,cmp);
		int sum=0;
		//int day=0;
		for(i=0;i<t;++i)
		{
			if(q.size()<arr[i].date) q.push(arr[i].gra); //q.size()当成天数 
			else//就要扣分了,不过要尽量扣得最少 
			{
				if(q.top()<arr[i].gra) 
				{
					sum += q.top();
					q.pop();
					q.push(arr[i].gra);
				}
				else
				{
					sum+=arr[i].gra;
				}
			}
			//++day;
		}
		printf("%d\n",sum);
	}
	return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

南阳oj 757 期末考试【优先队列+sort排序】

标签:

原文地址:http://blog.csdn.net/yuzhiwei1995/article/details/47108387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!