老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为10,要求在6天内交,那么要想拿到这10学分,就必须在第6天结束前交。
每个作业的完成时间都是只有一天。例如,假设有7次作业的学分和完成时间如下:
作业号 1 2 3 4 5 6 7
期限 1 1 3 3 2 2 6
学分 6 7 2 1 4 5 1
最多可以获得15学分,其中一个完成作业的次序为2,6,3,1,7,5,4,注意可能还有其他方法。
你的任务就是找到一个完成作业的顺序获得最大学分。
代码:
#include <bits/stdc++.h>
using namespace std;
int n , day , res;
bool y[1000010];
struct node {
int a , b;
}x[1000010];
int cmp(node c , node d) {
return c.b > d.b;
}
main() {
ios::sync_with_stdio(false);
//begin at here
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> x[i].a >> x[i].b;
}
sort(x + 1 , x + 1 + n , cmp);
for(int i = 1; i <= n; i++) {
for(int j = x[i].a; j >= 1; j--) {
if(!y[j]) {
y[j] = 1;
res += x[i].b;
break;
}
}
}
cout << res;
return 0;
}
时间超限 60分