跳到正文
Carol's Blog
返回

贪心的猴子

题目

来源 problem/week-1-1

描述

在动物园中,一群猴子排队领香蕉,每只猴子都有一个最少的香蕉需求量。

猴子很贪心,每只猴子拿香蕉时可能会拿多于自己最少需求量的香蕉。

每只猴子就算多拿香蕉,拿的香蕉数目也不会超过自身需求量的两倍,同时也不会超过剩余香蕉数量的一半。

最后一只猴子是例外,他可以把所有剩余的香蕉都拿走。


如果你是动物园饲养员,负责为猴子准备香蕉,在已知猴子总数和每只猴子的最少香蕉需求量时,

至少准备多少香蕉,才能保证每只猴子拿到的香蕉都能满足自己的需求。

输入

第一行:整数nn,表示猴子的总数,0≤n≤1000\le n\le100

第二行:nn个整数,第ii​​个整数为eie_i,表示第ii只猴子的最少香蕉需求量,1≤ei≤10001\le e_i \le 1000

输出

输出一整数,表示最少需要准备的香蕉的数量。

样例

输入样例1

3
1 4 3

输出样例1

10

其他样例见 problem/week-1-1

解析

解决问题的方法不唯一,我这里展示的一定不是最优解法。

符号说明

符号备注
ii猴子序号,从00到n−1n-1
eie_i​第ii只猴子香蕉的最小需求量
EiE_i第ii只猴子实际拿的香蕉数量
RiR_i该第ii只猴子拿香蕉时,所剩余的香蕉数量

关系表述

用以上定义的符号去表述问题中描述的关系

关系1

猴子拿香蕉时,香蕉剩余量必须大于等于猴子最小需求量

Ri≥eiR_i \ge e_i

关系2

对于i∈[0,n−1)i \in [0, n -1)​​,每只猴子实际拿的香蕉数量满足

ei≤Ei≤min⁡{2ei,⌊Ri/2⌋}e_i \le E_i \le \min \{2 e_i, \lfloor R_i / 2 \rfloor\}

关系3

对于i=n−1i = n-1,即最后一只猴子

Ei=RiE_i = R_i

关系4

对于i∈[0,n−1)i \in [0, n - 1)​ 满足

Ri=∑k=in−1EkR_i = \sum_{k = i}^{n - 1} E_k

关系解析

解析1

对于i∈[0,n−1)i \in [0, n - 1)​,每只猴子足够贪婪,永远会选择当前最优选择

由关系1和关系2可知

Ei=min⁡{2ei,⌊Ri/2⌋}≥eiE_i = \min\{2e_i, \lfloor R_i / 2 \rfloor \} \ge e_i

引入关系4,将RiR_i替换为EiE_i的表达式

Ei=min⁡{2ei,⌊∑k=in−1Ek/2⌋}≥eiE_i = \min\{2e_i, \lfloor \sum_{k = i}^{n - 1} E_k / 2 \rfloor \} \ge e_i

解析2

由关系1和关系3可知

En−1=Rn−1≥en−1E_{n - 1} = R_{n - 1} \ge e_{n - 1}

目标分析

综合解析1与解析2可得

观察可知,EiE_i​由En−1E_{n - 1}​和eie_i​决定,而eie_i​已知,故将En−1E_{n-1}​看做未知量进行推导。


对于i∈[0,n−1)i\in[0, n-1)​​,当⌊∑k=in−1Ek/2⌋≤2ei\lfloor \sum_{k = i}^{n - 1} E_k / 2 \rfloor \le 2e_i​​​​时

即EiE_i可以由EkE_k表出,k∈[i+1,n−1]k \in [i + 1, n - 1]

观察奇数偶数假设

局部最优

对于i∈[0,n−1)i \in [0, n -1),将En−1E_{n-1}和ii看做自变量,EiE_i看做因变量

可得函数关系:

Ei=f(En−1,i)=min⁡{2ei,∑k=i+1n−1Ek−1,∑k=i+1n−1Ek}≥eiE_i = f(E_{n-1}, i) = \min\{2e_i, \sum_{k = i + 1}^{n-1}E_k - 1, \sum_{k = i + 1}^{n-1}E_k\} \ge e_i

如果控制En−1E_{n-1}​​的量,使得每只猴子实际能拿的最多的香蕉的数量最少,则认为整体香蕉的消耗量最少,即局部最优等于全局最优。

即对于给定ii​,求解En−1E_{n-1}

arg min⁡ f(En−1,i):={En−1∣En−1≥en−1:f(En−1)≥ei}{\operatorname {arg\,min} }\,f(E_{n-1}, i):=\{E_{n-1}\mid E_{n-1} \ge e_{n-1}:f(E_{n-1})\geq e_i\}

分享这篇文章:

分享到微信

微信对普通网页没有开放通用直连分享协议。更稳妥的方式是复制链接、扫码打开,或在支持的设备上调用系统分享。

上一篇
研究生生活开端
下一篇
对SCU网络服务安全性的第一次探索