家庭作业
题目描述
输入格式
第一行一个整数n ,表示作业的数量;
接下来 n行,每行包括两个整数,第一个整数表示作业的完成期限,第二个数表示该作业的学分。
输出格式
输出一个整数表示可以获得的最大学分。保证答案不超过 C/C++ 的 int 范围
输入输出样例
输入 #1
7
1 6
1 7
3 2
3 1
2 4
2 5
6 1
输出 #1
15
说明/提示
思路一(有漏洞)
以第一关键字学分、第二关键字时间对 n 个作业进行排序。
从头开始遍历 n 个元素,用 now 记录当前时间,如果 now<hw[i].time 则 now++。
漏洞:可能学分 10、时间 9 的在前面,但学分 9、时间 1 的在后面,正解应该先拿学分 9,再拿学分 10。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
ll time, xf;
}hw[1000010];
bool cmp(node a, node b){
if(a.xf==b.xf)
return a.time<b.time;
return a.xf>b.xf;
}
int main(){
ll n;
// freopen("1.in", "r", stdin);
scanf("%lld", &n);
for(ll i=0; i<n; i++)
scanf("%lld%lld", &hw[i].time,