• 独立任务最优问题


    问题

    用两台处理机A和B处理n个作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。

    思路

    对于n个任务,有一部分任务x\((0\le x\le n)\)是交给A完成,另一部分y\((0\le y\le n)\)交给B完成,那么某个调度的结果就是:A处理完x个任务的时间和B处理完y个任务的时间的最大值。

    本题要让我们在所有调度的方案,选取最少花费时间。

    \(i\)表示处理完前\(i\)个任务的状态,\(j\)表示A处理完\(i\)中某些任务花费的时间。通过这两个状态(集合),我们就能够确定B处理完\(i\)个任务中,剩下部分的任务需要花费的时间,即为\(f(i,j)\)。我们也就有状态(集合)\((i,j)\)来表示某类调度方案。

    对于当前的状态\((i,j)\),我们可以从两个角度转移过来:

    1. 对于第\(i\)个任务,交给B处理,那么就有\((i-1,j)\to (i,j)\)。A没有处理任何任务,所以\(j\)不变
    2. 对于第\(i\)个任务,交给A处理,那么就有\((i-1,j-a_i)\to (i,j)\)。即A花费了\(a_i\)时间处理完任务\(j\)

    在A花费的时间\(j\)固定的情况下,为了求最少的花费时间,我们要让\(f(i,j)\)最小,所以根据上面的转移关系,就能得到转移方程。

    \[f(i,j)=min(f(i-1,j)+b_i,f(i-1,j-a_i)) \]

    那么完成\(n\)个任务后,B处理完成的时间就是\(f(n,j)\),所以答案就是\(min(max(j,f(n,j)))\)

  • 相关阅读:
    【模板】对拍程序
    【洛谷比赛】Agent1
    【NOIP2017】宝藏
    【NOIP2017】逛公园
    【NOIP2016】换教室
    【NOIP模拟】挖宝藏
    【NOIP模拟】健美猫
    【NOIP2014】飞扬的小鸟
    【NOIP2015】子串
    【CQOI2007】余数求和
  • 原文地址:https://www.cnblogs.com/FrankOu/p/16367073.html
Copyright © 2020-2023  润新知