【415】【最高乘法得分】

news2024/12/25 1:35:49

目录

使用dp

python版本

java版本

递推式

python版本

java版本

PS: 

java语法

1.定义数组

2.记忆化

3.计算max

难绷,本来想着4个指针,和四数之和那道题挺类似的。。。。

四数之和好像剪枝和预处理都是先排序的比较好做。

无奈,只能尝试先4层暴力再考虑优化。

4层暴力

class Solution:
    def maxScore(self, a: List[int], b: List[int]) -> int:
        m=len(b)
        mx=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]
        #和四数之和的做法很类似啊,类似但貌似不会啊啊啊啊啊啊
        #逼我用4层暴力
        a1=0
        for a1 in range(m-3):
            b1=a1+1
            c1=a1+2
            d1=a1+3
            while d1<m:
                mx=max(mx,a[0]*b[a1]+a[1]*b[b1]+a[2]*b[c1]+a[3]*b[d1])
                d1+=1
        for a1 in range(m-3):
            b1=a1+1
            c1=a1+2
            while c1<m-1:
                d1=c1+1
                while d1<m:
                    mx=max(mx,a[0]*b[a1]+a[1]*b[b1]+a[2]*b[c1]+a[3]*b[d1])
                    d1+=1
                c1+=1
        for a1 in range(m-3):
            b1=a1+1
            while b1<m-2:
                c1=b1+1
                while c1<m-1:
                    d1=c1+1
                    while d1<m:
                        mx=max(mx,a[0]*b[a1]+a[1]*b[b1]+a[2]*b[c1]+a[3]*b[d1])
                        d1+=1
                    c1+=1      
                b1+=1
        while a1<m-3:
            b1=a1+1
            while b1<m-2:
                c1=b1+1
                while c1<m-1:
                    d1=c1+1
                    while d1<m:
                        mx=max(mx,a[0]*b[a1]+a[1]*b[b1]+a[2]*b[c1]+a[3]*b[d1])
                        d1+=1
                    c1+=1      
                b1+=1
            a1+=1
        return mx                  

            
            

 显然超时

来个佬教我优化。

使用dp

 

从右往左求出的递推式

python版本
class Solution:
    def maxScore(self, a: List[int], b: List[int]) -> int:
        #缓存修饰器,避免重复计算dfs的结果
        @cache
        def dfs(i,j):
            if j<0:
                return 0
            if i<0:
                return -inf
            return max(dfs(i-1,j),dfs(i-1,j-1)+a[j]*b[i])
        return dfs(len(b)-1,3)

 

java版本
class Solution {
    public long maxScore(int[] a, int[] b) {
        int n=b.length;
        long[][]memo=new long[n][4];
        for (long[]row:memo){
            //表示没有计算过
            Arrays.fill(row,Long.MIN_VALUE);
        }
        return dfs(n-1,3,a,b,memo);
    }

    private long dfs(int i,int j,int[] a,int[] b,long[][] memo){
        if (j<0){
            return 0;
        }
        if (i<0){
            //防止溢出
            return Long.MIN_VALUE/2;
        }
        //需要计算,并记忆化
        if (memo[i][j]==Long.MIN_VALUE){
            memo[i][j]=Math.max(dfs(i-1,j,a,b,memo),dfs(i-1,j-1,a,b,memo)+(long)a[j]*b[i]);
        }
        return memo[i][j];
    }
}

java真的快。

递推式

python版本
class Solution:
    def maxScore(self, a: List[int], b: List[int]) -> int:
        #递推式
        n=len(b)
        f=[[0]*5 for _ in range(n+1)]
        f[0][1:]=[-inf]*4
        for i,y in enumerate(b):
            for j,x in enumerate(a):
                f[i+1][j+1]=max(f[i][j+1],f[i][j]+x*y)
        return f[n][4]
        

 

java版本
class Solution {
    public long maxScore(int[] a, int[] b) {
        int n=b.length;
        long [][] f=new long[n+1][5];
        Arrays.fill(f[0],1,5,Long.MIN_VALUE/2);
        for (int i=0;i<n;i++){
            for (int j=0;j<4;j++){
                f[i+1][j+1]=Math.max(f[i][j+1],f[i][j]+(long)a[j]*b[i]);
            }
        }
        return f[n][4];
    }
}

 

java非常快啊

PS: 

java语法
1.定义数组
long[][]memo=new long[n][4];
2.记忆化
        for (long[] row : memo) {
            Arrays.fill(row, Long.MIN_VALUE); // 表示没有计算过
        }
3.计算max
Math.max()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

CTF(misc)1和0的故事

题目链接 下载题目后是一堆整齐的01字符串&#xff0c;猜测是生成二维码&#xff0c;将0变成白色方块&#xff0c;1变成黑色方块。 0000000001110010000000000 0000000000011110100000000 0000000001110001000000000 0000000010111100000000000 0000000010101010000000000 00…

Python基础语法(3)下

列表和元组 列表是什么&#xff0c;元组是什么 编程中&#xff0c;经常需要使用变量&#xff0c;来保存/表示数据。变量就是内存空间&#xff0c;用来表示或者存储数据。 如果代码中需要表示的数据个数比较少&#xff0c;我们直接创建多个变量即可。 num1 10 num2 20 num3…

ModuleNotFoundError: No module named ‘datasets‘

报错信息&#xff1a; 解决&#xff1a;安装datasets 方法1: pip install datasets 方法2: python3可以使用以下命令&#xff1a; pip3 install datasets

【智路】智路OS Perception Fusion Service

Perception Fusion Service https://gitee.com/ZhiluCommunity/airos-edge/raw/r2.0/docs/02_Service/Perception_Fusion_Service.md 多传感器融合感知模块的主要任务是接收各传感器感知的障碍物信息&#xff0c;融合这些障碍物信息&#xff0c;得到融合后的障碍物信息。 智…

Tuxera NTFS for Mac 2023绿色版

​ 在数字化时代&#xff0c;数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作&#xff0c;然而&#xff0c;由于MacOS系统默认不支持NTFS的写操作&#xff0c;这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…

接口自动化框架入门(requests+pytest)

一、接口自动化概述 二、数据库概述 2.1 概念 存储数据的仓库&#xff0c;程序中数据的载体 2.2 分类 关系型数据库&#xff1a;安全 如mysql&#xff0c;oracle&#xff0c;SQLLite database tables 行列 非关系型数据库&#xff1a;高效 如redis&#xff0c;mongoDB 数…

C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递

C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递 code review! 文章目录 C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递一.子类初始化时父类带参构造函数的处理1.1.若父类只有带参数的构造函数,子类初始化时必须在初始化列表…

C++ 面试必备知识大全:从基础到高级特性全面解析

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; C 面试中常见的问题涵盖了语言基础、面向对象编程、内存管理、STL&#xff08;标准模板库&#xff09;、并发编程、设计模式等。以下是一些常见的 C 面试问题及其详细答案总结&#xff1…

protobuf中c、c++、python使用

文章目录 protobuf实例&#xff1a;例题1&#xff1a;[CISCN 2023 初赛]StrangeTalkBot分析&#xff1a;思路&#xff1a;利用&#xff1a; 例题2&#xff1a;[CISCN 2024]protoverflow分析&#xff1a; protobuf Protocol Buffers&#xff0c;是Google公司开发的一种数据描述语…

Tcl lnit error: Can’t find a usable init.tcl in the following directories 问题解决

这个问题出现在我用py2exe打包了一个包含tkinter的图形化界面&#xff0c;在当前电脑上运行无问题&#xff0c;在移动到新电脑上后提示报错、 这里吐槽一下&#xff0c;新电脑上报错信息一闪而过&#xff0c;我用的土法子解决的&#xff0c;就是录视频然后0.25倍速度暂定找到报…

删除Cookie原理

WebServlet("/deletecookie") // 这个注解指定了Servlet的URL映射路径 public class DeleteCookieServlet extends HttpServlet { // 定义一个继承自HttpServlet的类Override // 重写父类的方法protected void doGet(HttpServletRequest request, HttpServletResp…

ORM框架详解:为什么不直接写SQL?

想象一下&#xff0c;你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者&#xff0c;你可能会想&#xff1a;“我已经学会了SQL&#xff0c;为什么还要使用ORM框架呢&#xff1f;直接写SQL语句不是更简单、更直接吗&#xff1f;” 如…

【CS110L】Rust语言 Lecture3-4 笔记

文章目录 第三讲 所有权:移动与借用&例1例2例3 错误处理&#xff08;开头&#xff09;为什么空指针如此危险&#xff0c;我们能做什么以应对&#xff1f;— 引出Optionis_none()函数unwrap_or()函数常见用法 第四讲 代码实践:链表Box节点和链表的定义节点和链表的构造函数判…

基于Sobel算法的边缘检测设计与实现

1、边缘检测 针对的时灰度图像&#xff0c;顾名思义&#xff0c;检测图像的边缘&#xff0c;是针对图像像素点的一种计算&#xff0c;目的时标识数字图像中灰度变化明显的点&#xff0c;图像的边缘检测&#xff0c;在保留了图像的重要结构信息的同时&#xff0c;剔除了可以认为…

【WPF】桌面程序开发之xaml页面绑定数据模型详解

使用Visual Studio开发工具&#xff0c;我们可以编写在Windows系统上运行的桌面应用程序。其中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;项目是一种常见的选择。然而&#xff0c;对于初学者来说&#xff0c;WPF项目中xaml页面的布局设计可能是一…

unity3d入门教程七

unity3d入门教程七 17.1物理系统17.2静态刚体17.3刚体的碰撞17.4刚体的反弹18.1运动学刚体18.2碰撞检测18.3碰撞事件回调18.4目标的识别18.5碰撞的规避 17.1物理系统 在物理系统中的物体具有质量和速度的是刚体 不用写代码就会自由落体运动了 17.2静态刚体 给 ‘地面’ 添…

conda安装qgis(亲测没问题)

conda安装qgis&#xff08;亲测没问题&#xff0c;目前测试win10&#xff0c;linux其实也是可以的&#xff09; 目录 1.前提 2.准备条件 3.实战 4.扩展 1.前提 意外发现conda可以安装qgis&#xff0c;即使不是完全版&#xff0c;但是矢量空间分析都可以用&#xff0c;那么…

影刀RPA实战:网页爬虫之CSDN博文作品数据

今天我们使用影刀来采集网页数据&#xff0c;影刀RPA是一款功能强大的自动化办公软件&#xff0c;它可以模拟人工的各种操作&#xff0c;帮助企业自动处理大量重复性、有逻辑规则的工作。影刀RPA在网页数据采集方面表现出色&#xff0c;能够实现对任何桌面软件、Web程序的自动化…

危机中的机遇:客户服务在品牌危机管理中的角色与价值

在瞬息万变的商业环境中&#xff0c;品牌危机如同暗流涌动的漩涡&#xff0c;随时可能将企业卷入深渊。然而&#xff0c;正如古语所云&#xff1a;“祸兮福之所倚”&#xff0c;危机之中往往也蕴藏着转机与机遇。在这一过程中&#xff0c;客户服务作为企业与消费者之间的桥梁&a…