【问题描述】
有 n 个任务,每个任务有一个截止完成的时间 Ci
和完成需要的时间 Ti 。现在你一个人希望从 0 时刻开始完成尽量多的任务。问最多能完成多少任务?
【输入格式】
第 1 行为一个整数 n ;
以下 n 行描述n 个任务,其中第i+1 行描述第i 个任务,每行有两个整数Ti 和 Ci ;
【输出格式】
输出文件仅一个整数为最多完成的任务个数。
【样例输入1】
3
3 5
2 3
1 1
【样例输出1】
2
我样例过了,但测试点全WA了。
我的想法是将这个时间转换为一个个时间区间线段,求最多个没有重叠的线段数。
附上我的c++代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
struct node{
ll x , y;
int xb;
}input[100005];
bool cmp(node a , node b){
return a.y < b.y;
}
void solve()
{
scanf("%lld" , &n);
for (int i = 1 ; i <= n ; i++)
{
ll x , y;scanf("%lld%lld" , &x , &y);
input[i].x = max(y - x , 0ll) , input[i].y = y;
input[i].xb = i;
}
sort (input + 1 , input + 1 + n , cmp);
int sum = 1;
int r = input[1].y;
for (int i = 1 ; i <= n ; i++)
{
if (r <= input[i].x)
{
r = input[i].y;
sum++;
// cout << i <<endl;
}
// cout << input[i].xb << endl;
}
printf("%d" , sum);
}
int main()
{
solve();
return 0;
}