1. 题目描述
国王发现五个金矿,其中金矿的情况如下:
含金量分别为: 400、500、200、300、350
所需人数为: 5、5、3、4、3
现在总的人力为10,求能获得最大金币数
2. 解题思路
动态规划核心思路无非两点:终止(边界)条件 + (讨论条件)状态转移
假设金矿的含量为g [] 需要的人数为 p[] 总的人数为m
对每一所矿,这里假定第i所矿。需要的人数为p[i],含金量为g[i]。 讨论如下:
- p[i] > m 【人手不够】状态转移方程为 F(g[i+1:], p[i+1:], m)
- p[i] <= m 状态转移方程为 max (F(g[i+1:], p[i+1:], m-p[i]) + g[i], F(g[i+1:], p[i+1:], m))
- 终止条件: g为空或者m为0 返回0
3. AC代码
-
简单递归
def get_most_gold(g: list, p: list, m): if not g or m == 0: return 0 else: if p[0] > m: return get_most_gold(g[1:], p[1:], m) else: return max(get_most_gold(g[1:]<