马上就要考试了,小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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-05 19:31:11