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
| class Solution: def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int: m, n = len(nums1), len(nums2) f = [-inf]*(n+1) for i in range(m): pre = f[0] for j in range(n): tmp = f[j+1] f[j+1] = max(f[j+1], f[j], pre+nums1[i]*nums2[j], nums1[i]*nums2[j]) pre = tmp ans = f[n] return ans m, n = len(nums1), len(nums2) f = [[-inf]*(n+1) for _ in range(m+1)] f[0][0] = 0 for i in range(m): for j in range(n): f[i+1][j+1] = max(f[i][j+1], f[i+1][j], f[i][j]+nums1[i]*nums2[j], nums1[i]*nums2[j]) ans = f[m][n] return ans @cache def dfs(i:int, j:int)->int: if i < 0 or j < 0: return 0 if (i < 0 and j < 0) else -inf return max(dfs(i-1, j), dfs(i, j-1), dfs(i-1, j-1)+nums1[i]*nums2[j], nums1[i]*nums2[j]) return dfs(len(nums1)-1, len(nums2)-1)
|