南邮 OJ 1447 大作业

大作业

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 84            测试通过 : 33 

比赛描述

由于之前宅得太深,到了期末了,嘉娃还有 个大作业没有写。以嘉娃的速度,他 每天能且只能完成一个大作业。但是这 门大作业都有一个截止时间,如果超过这个 时间再提交的话将会没有分数。现在,嘉娃要在 天内完成 门大作业,他给了你一 份有 个大作业的截止时间和分数的列表,你能帮嘉娃算出他最多能得到多少分吗? 



输入

第一行一个整数 N(0 ≤ ≤ 1000),表示大作业的数目。接下来 行,每行两个 整数。 di(1 ≤ d≤ N表示第 个大作业的截止时间,以嘉娃开始做大作业开始算;pi(1 ≤ p≤ 500) 表示第 个大作业的分数。 

输出

输出一个整数,表示嘉娃能得到的最多的分数。之后加一个换行。

样例输入

5
3 500 
2 100 
2 250 
1 290 
5 200

样例输出

1240

题目来源

第8届南京大学 ACM 程序设计大赛



#include<stdio.h>
#define MAX_N 1001

int deadline[MAX_N];
int score[MAX_N];
bool visited[MAX_N];

int main(){
	int n,i,j;
	scanf("%d",&n);
	for(i=1; i<=n; i++){
		scanf("%d%d",deadline+i,score+i);
	}
	int maxIndex, sum=0;
	for(i=n; i>0; i--){
		maxIndex = 0;
		for(j=1; j<=n; j++){
			if(!visited[j] && deadline[j]>=i && score[j]>score[maxIndex] ){
				maxIndex = j;
			}
		}
		if(maxIndex){
			visited[maxIndex] = 1;
			sum += score[maxIndex];
		}
	}
	printf("%d\n",sum);
}






你可能感兴趣的:(ACM,南邮OJ,大作业)