Skip to main content

1458. Max Dot Product of Two Subsequences

https://leetcode.com/problems/max-dot-product-of-two-subsequences

Python

Bottom-Up DP

from functools import cache
from math import inf


class Solution:
def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:
n, m = len(nums1), len(nums2)

@cache
def dp(i, j):
if i == n or j == m:
return -inf

return max(
nums1[i] * nums2[j] + max(dp(i+1, j+1), 0),
dp(i+1, j),
dp(i, j+1)
)
return dp(0, 0)

Top Down DP

class Solution:
def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:
n, m = len(nums1), len(nums2)

dp = [[-inf] * (m+1) for _ in range(n+1)]

for i in range(n + 1):
for j in range(m + 1):
if i == 0 or j == 0:
dp[i][j] = float('-inf')
continue

dp[i][j] = max(
nums1[i - 1] * nums2[j - 1] + max(dp[i - 1][j - 1], 0),
dp[i - 1][j],
dp[i][j - 1],
)

return dp[n][m]