贪心,布置作业

内部赛 题目好像没有公开
 
很快就到考试周了!但是可怜的Big  Q  God平时过于认真训练,结果欠下了一大堆的作业,平时分岌岌可危!
 
现在BQGt=0时刻开始做作业,一共有n项作业,第i项作业会在a_i时刻布置下来(即当t geq a_iBQG可以做这一项作业),需要b_i的时间完成(假设当t=x时刻BQG选择做这一项作业,那么当t in [x,x+b_i)BQG不能选择做其他作业)。
 
BQG决定尽快解决掉所有作业,因此在完成所有作业之前他不会去做其他事情,他想知道最早在什么时刻能完成所有作业。
 

Input

第一行是一个正整数T(T leq 100),表示测试数据的组数,
 
对于每组测试数据,
 
第一行是一个正整数n(n leq 1000),表示作业的数量,
 
接下来n行,
 
每行包含两个整数a(0 leq a leq 1000000000),b(0 < b leq 1000000),表示作业布置的时刻和完成作业所需时间。
 

Output

对于每组测试数据,输出一个整数,表示最早完成所有作业的时刻。

#include <stdio.h>
#include <algorithm>

using namespace std;


struct action{
    int s;///布置的时间
    int f;///需要的时间
}a[1005];

bool cmp(const action &a,const action &b)
{
    if(a.s<=b.s)
        return true;
    else return false;
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int time=0;///当前时间
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d%d",&a[i].s,&a[i].f);
        sort(a,a+n,cmp);
        for(int i=0;i<n;i++)
        {
            if(time<=a[i].s)
            {
                time=a[i].s+a[i].f;
            }
            else time=time+a[i].f;
        }
        printf("%d
",time);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/TreeDream/p/5277663.html