题目链接:
https://leetcode-cn.com/problems/max-dot-product-of-two-subsequences/
动态规划模板题
对每个i,j,需考虑
1.dp[i-1][j-1](已经被dp[i][j-1]和dp[i-1][j]考虑进去)
2. dp[i-1][j-1]+nums1[i]*nums2[j]
3.dp[i-1][j]
4.dp[i][j-1]
5.nums1[i]*nums2[j]
中的最大值。
class Solution {
public:
int maxDotProduct(vector<int>& nums1, vector<int>& nums2) {
int len1=nums1.size();
int len2=nums2.size();
int dp[len1][len2];
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
if(i==0&&j==0)dp[0][0]=nums1[0]*nums2[0];
else if(i==0)
{
dp[i][j]=max(dp[i][j-1],nums1[0]*nums2[j]);
}
else if(j==0)
{
dp[i][j]=max(dp[i-1][j],nums1[i]*nums2[0]);
}
else
dp[i][j]=max(nums1[i]*nums2[j],max(dp[i-1][j-1]+nums1[i]*nums2[j],max(dp[i-1][j],dp[i][j-1])));
}
}
return dp[len1-1][len2-1];
}
};