1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class Solution: def minCost(self, m: int, n: int, waitCost: List[List[int]]) -> int: ans = 0 f = [inf]*(n+1) f[1] = -waitCost[0][0] for i in range(m): for j in range(n): f[j+1] = (i+1)*(j+1) + min(f[j], f[j+1]) if i != m-1 or j != n-1: f[j+1] += waitCost[i][j] return f[n]
ans = 0 f = [[inf]*(n+1) for _ in range(m+1)] f[0][1] = -waitCost[0][0] for i in range(m): for j in range(n): f[i+1][j+1] = (i+1)*(j+1) + min(f[i+1][j], f[i][j+1]) if i != m-1 or j != n-1: f[i+1][j+1] += waitCost[i][j] return f[m][n] ans = 0 @cache def dfs(i, j): if not (0 <= i <= m-1 and 0<=j<=n-1): return inf val = (i+1) * (j+1) if i == m-1 and j == n-1: return val val += waitCost[i][j] return min(dfs(i+1, j), dfs(i, j+1)) + val
return min(dfs(1, 0), dfs(0, 1)) + 1
|