Python, simple with explanation
```python3 []
class Solution:
    def maxScore(self, n: int, k: int, stayScore: List[List[int]], travelScore: List[List[int]]) -> int:
        dp = [[0] * n for _ in range(k)] # dp[i][j] = best possible score having finished day i at city j

        for i in range(k):
            for j in range(n):
                dp[i][j] = max([
                    (dp[i - 1][o] if i > 0 else 0) +                   # best possible score at end of yesterday in city o
                    (stayScore[i][j] if o == j else travelScore[o][j]) # score obtained by (not) travelling from city o to city j
                    for o in range(n)
                ])

        return max(dp[k - 1][:])
```
['Python3']