Python数学游戏算法

标签 python algorithm list math

我有一个列表,其中(随机)包含 5 到 10 个项目。列表中的第一个整数始终为 0,所有其他整数均为随机正数。它可能看起来像这样:

0 10 50 45 80 5 35

该程序的目标是将列表中的项目视为空格,当您移动到下一个项目时添加到总和中。这个人从 0 开始,总是可以向右移动一个空格或跳过一个空格并落在下一个空格上。例如,对于上面的那个,我可以从 0 到 10,或者第一步从 0 到 50。然后我可以从 50 到 45 或从 50 到 80 等等。

我想找出一个递归算法来遍历这些并找到到达总和最低的最后一项的方法。我应该检查所有可能的组合还是有更简单的方法来做到这一点?这与检查每回合两种可能移动的值(value)并选择较低的值(value)有关吗?

最佳答案

是的,有一种更有效的方法。这个问题看起来非常适合 dynamic programming .这个想法是您以相反的方式看待问题:对于每个 P 位置,您可以从前一个位置或从后面两个位置开始。因此,要找到到达位置 P 的最佳路线,您只需要知道到达位置 (P-1) 的最佳路线> 和 (P-2) 然后比较它们。

如果我正确理解总和计算背后的逻辑,这就是你需要的:

def solve(values):
    prev1 = 0
    prev2 = 0
    for p in range(len(values)):
        cur = min(prev1, prev2) + values[p]
        prev2 = prev1
        prev1 = cur

    return cur

print(solve([0, 10, 50, 45, 80, 5, 35]))

输出

95

关于Python数学游戏算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773787/

相关文章:

python - 迭代数据框时如何引用行和列

python - Django 一对一关系查询集

mysql - 保存日期跨度的数据库

python - 在python中,如何根据特定值将文件解析为列表?

python - 当本地是 Django 1.7/Postgres 9.3 时,我应该如何调试在 Django 1.3/Postgres 8.4 的服务器上运行的应用程序?

python - 绘制图形并退出,但保持图形窗口打开

c++ - 修改 Bellman-Ford 算法以维护基于成本的有序列表

c# - 如何实现该函数的最坏情况时间复杂度为 O(n)?

list - 为什么 SML 中的列表串联是右结合的?

java - 这个方法在 Big O 表示法中如何执行?