# načtení a předzpracování vypadá stejně jako v předchozím řešení for delka in range(K,N+1): for lo in range(N+1-delka): hi = lo+delka soucet_nahore = P[hi] - P[hi-K] soucet_dole = P[hi-K] - P[lo] if soucet_nahore > Q*soucet_dole + 1e-9: # tímto zápasem turnaj končí answer = 1 else: # turnaj bude pokračovat, zvolíme lepší možnost, koho poslat pryč a1 = memo[lo+1][hi] a2 = memo[lo][hi-1] answer = 1 + max(a1,a2) memo[lo][hi] = answer print( memo[0][N] )