时间限制:1000 ms
| 内存限制:65535 KB
难度:2
- 描述
-
马上就要考试了,小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
-
错把
<span style="color:#ff0000;background-color: rgb(102, 255, 153);">int cmp(stu a,stu b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x; }</span>
-
<span style="color:#ff0000;background-color: rgb(102, 255, 153);">写成</span><pre name="code" class="cpp" style="font-size: 14px; line-height: 21px;"><span style="color:#ff0000;background-color: rgb(102, 255, 153);">int cmp(stu a,stu b){ if(a.x==b.x) return a.y>b.y; return a.x>b.x; }</span>
-
#include<stdio.h> #include<queue> #include<algorithm> using namespace std; struct stu{ int x,y; }aa[1000]; int cmp(stu a,stu b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int main() { int n; while(scanf("%d",&n)!=EOF) { int i; // while() priority_queue<int ,vector<int>,greater<int> >s; for(i=0;i<n;i++) scanf("%d%d",&aa[i].x,&aa[i].y); int sum=0; sort(aa,aa+n,cmp); for(i=0;i<n;i++) { if(s.size()<aa[i].x) s.push(aa[i].y); else{ if(s.top()<aa[i].y) { sum+=s.top(); s.pop(); s.push(aa[i].y); } else sum+=aa[i].y; } } printf("%d\n",sum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 15:18:28