python 40分求助
查看原帖
python 40分求助
880325
he1230楼主2024/3/5 14:43
def ok(x,ml):
    if x>=0 and x<=ml:
        return True
    else:
        return False

n,bl,ml=map(int,input().split())
w=[0]
w.extend(list(map(int,input().split())))
dp=[[-1]*2 for i in range(1+n)]
dp[0][0]=dp[0][1]=bl

for i in range(1,n+1):
    if not ok(dp[i-1][0],ml) and not ok(dp[i-1][1],ml):
        break
    elif ok(dp[i-1][0],ml) or ok(dp[i-1][1],ml):
        if ok(dp[i-1][0],ml):
            d=dp[i-1][0]
        else:
            d=dp[i-1][1]
        dp[i][0]=d-w[i]
        dp[i][1]=d+w[i]
    else:
        dp[i][0]=max(dp[i-1][0],dp[i-1][1])-w[i]
        dp[i][1]=max(dp[i-1][0],dp[i-1][1])+w[i]
if (not ok(dp[n][0],ml) and not ok(dp[n][1],ml)) or i<n:
    print(-1)
else:
    if ok(dp[n][0],ml) and not ok(dp[n][1],ml):
        d=dp[n][0]
    elif not ok(dp[n][0],ml) and ok(dp[n][1],ml):
        d=dp[n][1]
    else:
        d=max(dp[n][0],dp[n][1])
    print(d)
            

2024/3/5 14:43
加载中...