def alien_dp(cost): dpa = (0, 0) dpb = (-INF, -1) for i in range(N): ndpa = max((dpa[0] + A[i], dpa[1]), (dpb[0] + A[i] - cost, dpb[1] - 1)) ndpb = max((dpa[0] + B[i] - cost, dpa[1] - 1), (dpb[0] + B[i], dpb[1])) dpa = ndpa dpb = ndpb score, cnt = max(dpa, dpb) cnt =- cnt return score, cnt score, cnt = alien_dp(0) if cnt <= K: print(score) exit() ng, ok = 0, 1 << 60 while ok - ng > 1: med = (ok + ng) // 2 score, cnt = alien_dp(med) if cnt > K: ng = med else: ok = med score, cnt = alien_dp(ok) print(score + ok * K)