Readable Solution, Beats 100% in Time and Memory
csharp []\npublic class Solution\n{\n    public int MaxScore(int cities, int days, int[][] stayScore, int[][] travelScore)\n    {\n        var dp = new int[days
```csharp []\npublic class Solution\n{\n    public int MaxScore(int cities, int days, int[][] stayScore, int[][] travelScore)\n    {\n        var dp = new int[days, cities];\n\n        int lastDay = days-1;\n        for(int city = 0; city < cities; city++)\n        {\n            dp[lastDay, city] = Math.Max(\n                stayScore[lastDay][city],\n                Enumerable.Range(0, cities).Max(otherCity => travelScore[city][otherCity]));\n        }\n\n        for(int day = days-2; day >= 0; day--)\n        {\n            for(int city = 0; city < cities; city++)\n            {\n                dp[day, city] = Math.Max(\n                    stayScore[day][city] + dp[day+1, city],\n                    Enumerable.Range(0, cities).Max(otherCity => travelScore[city][otherCity] + dp[day+1, otherCity]));\n            }\n        }\n\n        return Enumerable.Range(0, cities).Max(city => dp[0,city]);\n    }\n}\n```
[]