因为总的报告时间一定,可以推出执行时间长的任务先报告会使总的时间减少。
为什么?
对于相邻的两个任务,通过交换顺序,使执行时间长的任务在前,会使总时间减少(自己画数轴推推就知道了。。。。。)
AC代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Node{
int a, b;
};
Node node[1100];
int N, ans;
int cmp( const void *a, const void *b ){
if( ((Node*)a)->b != ((Node*)b)->b ){
if( ((Node*)a)->b < ((Node*)b)->b ){
return 1;
}else{
return -1;
}
}else{
if( ((Node*)a)->a < ((Node*)b)->a ){
return 1;
}else{
return -1;
}
}
}
int main(){
int Case = 1;
while( scanf( "%d", &N ) && N ){
for( int i = 0; i < N; i++ ){
scanf( "%d%d", &node[i].a, &node[i].b );
}
qsort( node, N, sizeof( Node ), cmp );
int temp = 0;
ans = 0;
for( int i = 0; i < N; i++ ){
temp += node[i].a;
ans = max( ans, temp + node[i].b );
}
printf( "Case %d: %d\n", Case++, ans );
}
return 0;
}