在完成工作时最大化利润

时间:2016-07-04 06:01:18

标签: algorithm math time-complexity discrete-mathematics

我们给出了两个数组M(金钱)和E(经验)的整数,每个大小最多为50。鲍勃完成工作后,发生了两件事:

(让TE成为Bob 0

初始化的总经验
  1. Bob的经验(即TE)增加E[i]
  2. 然后,他将收到相当于TE*M[i]
  3. 的钱

    如果他以最佳顺序完成工作,鲍勃可以获得的最大利润是多少?

    For any i we know:
    1 <= E[i] <= 10^5
    1 <= M[i] <= 10    
    
    Example:
    M[] = { 20, 30,  100 }
    E[] = {  1,  1, 6 }
    
    Answer: 880 = job 3-1-2 = 6*100 + 7*20 + 8*30 = 980
    

1 个答案:

答案 0 :(得分:1)

我认为问题可以通过贪心算法(这是DP的一个特例)来解决,如下所述:

  1. 按比例Exp/Money按降序排列作业
  2. 如果是平局,则按Money按升序排序作业
  3. 然后,排序的作业序列是作业的顺序,产生最佳解决方案。

    我的推理如下:比率Exp/Money可以解释为您可以用1个钱购买多少Exp ,所以如果我们选择比率更高的工作总是更好首先,这会增加以后工作的经验。

    在平局案例中,选择奖金较少的工作,因为这会使得奖金较高的工作可以在以后乘以更大的经验因素。

    例如:

    E = {2,1,6,1}
    M = {40,20,100,10}
    
    Sorted job = { job3, job4, job2, job1}  
    
    = 6*100 + 7*10 + 8*20 + 10*40 = 1230