python问题--请仔查看内容和例子

python
问题内容
你是水银!你可以在1秒内走K米。要想成为x战警,你还需要有良好的判断力,所以你要接受考验。

在这个测试中,你必须沿着一条一维线跑,试图接住掉下来的球。这条线每米被标记为位置0,1,…,1,000,000,000。每一秒钟,一个标有分数的球就会出现在靠近地面的位置上。如果球离你的距离不超过K米,你可以移动去接它。但如果你决定不这样做,球就会掉到地上,然后立即消失。然而,规则是,除非你真的能接住掉下来的球,否则你不能离开你的位置。所以在任何一秒内,如果你移动时没有接住球,你将被取消资格。

目标是收集尽可能高的总分。
为了帮助你计划测试,x战警学院给了你投球的位置顺序和分数。然后你试着写一个程序来计算你可能的最高分!

输入:
•第一行:用空格分隔的三个整数;N(球的数量,N≤1000),K(一秒钟内你能走的最大距离),S(在直线上的起始位置)。
0≤K, S≤1,000,000,000
下面N行表示连续几秒内发生的事件。第一行是第一秒,以此类推。每行包含两个整数;球的位置和得分在各自的秒。

输出
一个数字;最高总分。

例子

img

详细代码如下,递归实现
思路是在递归的时候,当前球可以选择接或者不接,然后求出最大值

def max_score(dis, score, k, s, n, index):
    if index==n:
        return 0
    add = 0
    p1 = max_score(dis, score, k, s, n, index+1)
    if (s-dis[index])<=k and (s-dis[index])>=-k:
        s = dis[index]
        add = score[index]
    p2 = add + max_score(dis, score, k, s, n, index+1)
    if p1>p2:
        return p1
    else:
        return p2

n,k,s=input().split()
n=int(n)
k=int(k)
s=int(s)

dis=[]
score=[]
for _ in range(n):
    _dis,_score = input().split()
    dis.append(int(_dis))
    score.append(int(_score))

#输出最大得分
print(max_score(dis, score, k, s, n, 0))

看样子是做一个游戏呢,看完有点晕,有流程图之类的吗!

解决了吗

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^