The 13th UESTC Programming Contest Preliminary—— L - Lovely princess

题意:有n项工作,每项工作都有一个Vi和ai,表示当你的能量大于等于Vi值时才能去做这项工作,完成后能量增加ai,且完成过程中不消耗能量。如果要完成n项工作,最小的初始能量为多少。

解题思路:将所有工作按照Vi从小到大排序,依次做任务既是最优情况,记sum[i] = a1+a2+......+ai,完成所有工作所需的最小初始能力值即为ans= max(vi-sum[i-1]),详细解释为:将每次完成上次工作后的自身能量与当前所做工作的Vi的差值累加,详见代码。

Code:

#include 
#include 
#include 
using namespace std;

struct Node
{
    int v,a;
    bool operator < (const Node &b) const
    {
        return v tmp)//当下次的V值大于所拥有的精力
            {
                ans +=Job[i].v - tmp;//则ans记录差值
                tmp = Job[i].v;//将Job[i].v赋给tmp
            }
            tmp+=Job[i].a;//tmp加上i的a值相当于此时完成了此项工作
        }
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(ACM——杂题)