GM老师有n个学生,每个学生需要完成一个项目。GM老师需要花Mi分钟为第i个学生布置任务,然后这个学生会独立不间断的用Ri分钟完成项目。请问GM老师需要选择怎样的顺序来布置任务,才能使得所有项目尽早执行完(也就是最后一个完成的学生尽快结束)。注意,GM老师不能同时给两个学生布置项目,但学生可以同时执行他们各自的项目。
输入要求
输入n+1行
第1行输入项目数n
第2行到n+1行,每行输入GM老师为这n个学生布置任务所需时间M和完成任务所需时间R
所有输入均为整数,其取值范围为[1, 1000]
输出要求
输出项目个数和所有项目完成的最短时间(分钟),格式如下:
Project n: m(其中,n代表项目个数,m代表最短时间,注意有换行)
详见输出样例
输入
3
3 6
4 3
3 2
输出
Project 3: 12
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1010;
struct node {
int m,r;
}a[maxn];
bool cmp(const node &a,const node &b) {
if(a.r == b.r)
return a.m < b.m;
return a.r > b.r;
}
int n;
int main() {
scanf("%d",&n);
for(int i = 1;i <= n;++i)
scanf("%d%d",&a[i].m,&a[i].r);
sort(a+1,a+n+1,cmp);
int sum = 0,mx = 0;
for(int i = 1;i <= n;++i) {
sum += a[i].m;
mx = max(mx,sum+a[i].r);
}
sum = max(sum,mx);
printf("Project %d: %d\n",n,sum);
}