NYOJ 题目757 期末考试(贪心)

来源:互联网 发布:小米笔记本安装linux 编辑:程序博客网 时间:2024/06/06 16:31

期末考试

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没
交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗?
输入
输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数。
(以文件结尾)
输出
输出扣除的最小分数。
样例输入
33 103 53 131 63 21 371 34 26 14 72 64 53 4
样例输出
035
上传者
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);}}


0 0
原创粉丝点击