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

3290. 最高乘法得分

在这里插入图片描述

心路历程:

1、第一次做周赛的题,第一眼发现和之前hot100里面有一道两个子序列的dp很像,写完之后发现又是像之前一样超时,大概97ac
2、看了灵神的题解,发现主要问题出在建模没建好,还是应该以选or不选去考虑递推
3、在dp中还是尽量少用循环去表示选哪个的方式

选or不选:

这道题最神奇的地方在于,如果下面这个递推的max顺序反过来就会超内存。感觉用递归解动态规划还是有一定的限制的其实。。。
而且下面这个解答的初始判断条件的顺序也不能变,第一感觉dp问题好像用递归性价比不是很高。

class Solution:
    def maxScore(self, a: List[int], b: List[int]) -> int:
        @cache
        def dp(i:int, j:int) -> int:  # 前i个a和前j个b组成的得分最大值
            if j < 0: return 0
            if i < 0: return -inf
            return max(dp(i-1, j), dp(i-1, j-1) + a[j] * b[i])
        return dp(len(b)-1, 3)

97 ac 解(超时):选哪个:

class Solution:
    def maxScore(self, a: List[int], b: List[int]) -> int:
        # 
        n = len(b)
        @cache
        def dp(i, j):  # 前i个a和前j个b组成的得分最大值
            # print(i, j)
            if j < i: res= -float('inf')
            elif j == i: res= sum([a[k]*b[k] for k in range(i+1)])
            else:
                if i == 0: 
                    res = max([a[0]*eve for eve in b[:j+1]])
                else: # i != 0 and j > i; a[i]必选,选b[k], k \in [j, len()]
                    res = max([dp(i-1, k-1) + a[i] * b[k] for k in range(j+1)])
                    # res = max(dp(i-1, j), dp(i-1, j-1) + a[i]*b[j])
            # print(i, j, res)
            return res
        ans = dp(3, n-1)
        return ans

            # [3, 2] [2, -6, 4, -5] -> [3, 2, 5] [2, -6, 4, -5]


http://www.kler.cn/news/305559.html

相关文章:

  • Thinkphp5 + Swoole实现邮箱异步通知
  • 重新认识一下JNIEnv
  • 【学习笔记】SSL密码套件的选择
  • 微信小程序-formData使用
  • VSCode C++ Tasks.json基本信息介绍
  • PDF——压缩大小的方法
  • HC-SR501人体红外传感器详解(STM32)
  • 【笔记】CCF直播:《如何在国际会议上有效交流》(2024-9-15)
  • rust解说
  • Vue介绍、窗体内操作、窗体间操作学习
  • 9.11 codeforces Div 2
  • SOME/IP通信协议在汽车业务具体示例
  • c# sqlhelper类
  • lvgl | guider应用笔记
  • java项目之网上商城系统设计与实现(源码+文档)
  • Tomcat_WebApp
  • 020、二级Java选择题综合知识点(持续更新版)
  • 树莓派Pico2(RP2350)开发环境搭建
  • Linux内核初始化过程中加载TCP/IP协议栈
  • ios xib 子控件约束置灰不能添加约束
  • 【modou网络库】Reactor架构与TCP通信机制分析
  • 基于hispark_taurus开发板示例学习OpenHarmony编译(1)
  • 记录工作中遇到的问题(持续更新~)
  • TikTok云手机解决运营效率低、封号问题
  • QT消息对话框学习
  • 用户登陆网址都发生了什么?
  • 网络原理1-传输层
  • [mysql]mysql的运算符
  • it基础软件运维管理:从操作系统到数据库,再到中间件和应用系统
  • 测试ASP.NET Core的WebApi项目调用WebService