leetcode-190周赛-1458-两个子序列的最大点积
题目描述:
提交:
class Solution: def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int: n1,n2 = len(nums1),len(nums2) dp = [[0] * n2 for _ in range(n1)] for i in range(n1): for j in range(n2): if i == 0 or j == 0: dp[i][j] = nums1[i] * nums2[j] if j != 0: dp[i][j] = max(dp[i][j],dp[i][j-1]) else: dp[i][j] = max(dp[i-1][j-1] + nums1[i] * nums2[j],dp[i][j-1],dp[i-1][j]) return dp[-1][-1]
另:
class Solution: def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int: a, b = nums1, nums2 if max(a)<0<min(b): return max(a)*min(b) if max(b)<0<min(a): return max(b)*min(a) n, m = len(a), len(b) f = [[0]*(m+1) for _ in range(n+1)] for i in range(n): for j in range(m): f[i+1][j+1] = max(f[i][j+1], f[i+1][j], f[i][j]+a[i]*b[j]) return f[n][m]