3290. 最高乘法得分
3290. 最高乘法得分 给你一个大小为 4 的整数数组 a 和一个大小 至少为 4 的整数数组 b。 你需要从数组 b 中选择四个下标 i0, i1, i2, 和 i3,并满足 i0 < i1 < i2 < i3。你的得分将是 a[0] * b[i0] + a[1] * b[i1] + a[2] * b[i2] + a[3] * b[i3] 的值。 返回你能够获得的 最大 得分。 提示: $a.length == 4$ $4 <= b.length <= 10^5$ $-10^5 <= a[i], b[i] <= 10^5$ 思路 用dp来做,从后往前选取a[i]、b[j]相乘,考虑2种状态: 选当前a[i]、b[j]相乘,继续考虑a[i-1]、b[j-1] 不选选当前a[i]、b[j]相乘,继续考虑a[i]、b[j-1] 状态转换: dfs(i,j)=max(dfs(i-1,j-1)+a[i]*b[j],dfs(i,j-1)) 点击展开/折叠 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { public: long long maxScore(vector<int>& a, vector<int>& b) { int n=b.size(); vector<array<long long,4>>memo(n); for(auto&row:memo){ ranges::fill(row,LLONG_MIN); } auto dfs=[&](auto&&dfs,int i,int j)->long long{ if(j<0)return 0; if(i<0){ return LLONG_MIN/2; } auto &res=memo[i][j]; if(res==LLONG_MIN){ res=max(dfs(dfs,i-1,j),dfs(dfs,i-1,j-1)+(long long)a[j]*b[i]); } return res; }; return dfs(dfs,n-1,3); } }; 参考 ...