当前位置: 首页 > article >正文

力扣3290.最高乘法得分

力扣3290.最高乘法得分

递归 + 记忆化搜索

  • 对于b数组,从右往左考虑取不取如果取则问题变成b[0] ~ b[i-1]间找j - 1个数

    • 如果不取,则问题变成b[0] ~ b[i]间找j个数
    • 即dfs(i,j) = max(dfs(i-1,j) , dfs(i-1,j-1) + a[j] * b[i])
  • 边界:dfs(i,-1) = 0,dfs(-1,j>=0) = -INF

  • 终点:dfs(n-1,3);

  • 同时引入记忆化搜索,因为只要参数一致,每次的结果都一样,所以遍历过的就不用再遍历

    • 初始化成INF即可
  •   class Solution {
      public:
          long long maxScore(vector<int>& a, vector<int>& b) {
              int n = b.size();
              //用vector<long long>也可以
              //需要一个一个填充
              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 {
                  //j == -1
                  if(j < 0)
                      return 0;
                  if(i < 0)  //非法
                      return LLONG_MIN / 2;
                  //引用取出memo[i][j],如果没更新过,就求res的同时更新
                  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);
          }
      };
    

1:1递推

  • f[i+1][j+1] 的定义和dfs(i,j)的定义一样

    • dfs(-1,j>=0) = -INF也翻译,为f[0][j] = -INF;
  •   class Solution {
      public:
          long long maxScore(vector<int>& a, vector<int>& b) {
              int n = b.size();
              vector<array<long long,5>> f(n+1);
              //初始化
              for(int j=1;j<5;j++)
                  f[0][j] = LLONG_MIN / 2;
              for(int i = 0;i<n;i++)
                  for(int j=0;j<4;j++)
                      f[i+1][j+1] = max(f[i][j+1],f[i][j] + (long long)a[j] * b[i]);
              return f[n][4];
          }
      };
    

http://www.kler.cn/a/316478.html

相关文章:

  • 树莓派(Raspberry Pi)Pico 2 C_C++开发环境配置(Docker+SDK)
  • 第三十一天|贪心算法| 56. 合并区间,738.单调递增的数字 , 968.监控二叉树
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-Qwen-Agent深入学习(四)
  • SpringBoot参数注解
  • acwing算法基础02一高精度,前缀和,差分
  • linux c/c++最高效的计时方法
  • 【PHP小课堂】PHP中的函数相关处理方法学习
  • 【计算机网络 - 基础问题】每日 3 题(十六)
  • 目标检测:滑块验证
  • 2012年408考研真题-数据结构
  • 领夹麦克风哪个品牌好,无线领夹麦克风品牌排名,麦克风品牌大全
  • Python ORM 框架 SQLModel 快速入门教程
  • 每日一道算法题(二)—快乐数
  • STaR: Bootstrapping Reasoning With Reasoning
  • Android 如何实现搜索功能:本地搜索?数据模型如何设计?数据如何展示和保存?
  • 基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别
  • Python3使用websocket调用http代理IP
  • IP包头分析
  • 【SSM-Day2】创建SpringBoot项目
  • 基于丹摩智算平台-手把手拿下经典目标检测模型 Faster-Rcnn
  • H5响应式的文化传媒娱乐公司HTML网站模板源码
  • Linux入门学习:深刻理解计算机硬件与OS体系
  • saltstack配置管理
  • 深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
  • C++第七节课 运算符重载
  • 航拍房屋检测系统源码分享