期末考试
时间限制: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
代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> #include<queue> using namespace std; struct record { int date; int score; friend bool operator<(record a,record b) { return a.score<b.score; } }; int main() { int n,i,j,a,b,vis[1000]; record t; priority_queue<record>q; while(scanf("%d",&n)!=EOF) { memset(vis,0,sizeof(vis)); for(i=0;i<n;i++) { scanf("%d%d",&a,&b); t.date=a; t.score=b; q.push(t); } int sum=0; for(i=0;i<n;i++) { t=q.top(); q.pop(); for(j=t.date;j>=1;j--) { if(vis[j]==0) { vis[j]=1; break; } } if(j==0) sum+=t.score; } printf("%d\n",sum); } return 0; }
- 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数。