期末考试
时间限制:
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
上传者
-
TC_常红立
ac代码
#include<stdio.h> #include<string.h> #include<stdlib.h> struct s { int d,f; }a[2005]; int cmp(const void *a,const void *b) { return (*(struct s *)b).f-(*(struct s *)a).f; } int main() { int n,v[2005]; while(scanf("%d",&n)!=EOF) { int i,s=0,sum=0; memset(v,0,sizeof(v)); for(i=0;i<n;i++) { scanf("%d%d",&a[i].d,&a[i].f); s+=a[i].f; } qsort(a,n,sizeof(a[0]),cmp); for(i=0;i<n;i++) { if(v[a[i].d]==0) { v[a[i].d]=1; sum+=a[i].f; } else { int temp=a[i].d; while(temp>0) { if(v[temp]==0) { sum+=a[i].f; v[temp]=1; break; } temp--; } } } printf("%d\n",s-sum); } }
-
输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数。