动态规划-状态转移(O(n))

获取生成数组中的最大值

1.题目

2.思路

其实只要看透该题的本质 并不难,应用动态规划,题目就已经给出了状态方程的式子。

首先规定好maxn的大小,防止溢出。定义nums数组。定义一个函数,写入状态方程式子。最后定义一个变量与数组元素进行对比,返回变量。

3.代码

import java.util.Scanner;public class 获取生成数组中的最大值 {static int maxn=110;static int [] nums=new int[maxn];public static  int maxNums(int n) {nums[0]=0;nums[1]=1;for(int i=0;i<=n;i++) {if(2<=2*i && 2*i<=n) {   //当2<=2*i<=n时,数学形式的表达和代码表达不太一样,注意注意nums[2*i]=nums[i];}if(2<=2*i+1 &&2*i+1<=n) {nums[2*i+1]=nums[i]+nums[i+1];}}int v=0;for(int i=0;i<=n;++i) {v=Math.max(v, nums[i]);}return v;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.print("n=");int num=sc.nextInt();System.out.println(maxNums(num));}}

4.知识

1)比大小

v=Math.max(v, nums[i]);    不用导包,记住格式,Math.min();

Math.abs() 返回绝对值; Math.pow(a,b) 返回a的b次幂的值; Math.PI  表示数学常量π的值。

在Java中,Math 类提供了许多常用的数学函数和常量。与 Math.min() 类似,Math 类中还有其他一些常用的数学方法,包括:Math.max(double a, double b): 返回两个 double 值中的较大值。Math.min(int a, int b): 返回两个 int 值中的较小值。Math.abs(int a): 返回 int 值的绝对值。Math.abs(long a): 返回 long 值的绝对值。Math.abs(float a): 返回 float 值的绝对值。Math.abs(double a): 返回 double 值的绝对值。Math.sqrt(double a): 返回 double 值的正平方根。Math.pow(double a, double b): 返回 a 的 b 次幂的值。Math.exp(double a): 返回自然数 e 的 a 次幂的值。Math.log(double a): 返回 double 值的自然对数(以 e 为底)。Math.log10(double a): 返回 double 值的以 10 为底的对数。Math.sin(double a): 返回 double 值(以弧度为单位)的正弦值。Math.cos(double a): 返回 double 值(以弧度为单位)的余弦值。Math.tan(double a): 返回 double 值(以弧度为单位)的正切值。Math.asin(double a): 返回 double 值的反正弦值(以弧度为单位)。Math.acos(double a): 返回 double 值的反余弦值(以弧度为单位)。Math.atan(double a): 返回 double 值的反正切值(以弧度为单位)。Math.atan2(double y, double x): 使用两个参数 y 和 x 的商来计算反正切值(以弧度为单位)。Math.toRadians(double angdeg): 将角度转换为弧度。Math.toDegrees(double angrad): 将弧度转换为角度。Math.random(): 返回一个伪随机数,该数大于等于 0.0 且小于 1.0。Math.PI: 表示数学常量 π 的值。Math.E: 表示数学常量自然对数的底数 e 的值。这只是 Math 类中提供的一些常用方法的概览。你可以在Java的官方文档或其他相关资源中查找更多关于 Math 类的详细信息。

分隔数组以得到最大和

1.题目

2.思路

首先,我们定义一个长度为n的数组dp,其中dp[i]表示将arr数组的前i个元素分隔并变换后能够得到的元素最大和。

然后,我们从左到右遍历arr数组,对于每个位置i,我们考虑将arr[i]作为子数组的最后一个元素,并查找一个合适的分割点j(j < i),使得arr[j+1]到arr[i]这个子数组的长度不超过k,并且arr[j+1]到arr[i]中的最大值乘以子数组的长度加上dp[j]的和最大。

在遍历的过程中,我们需要维护一个变量maxVal,用来记录从当前位置向前回溯k个位置内的最大值,因为我们需要将这个最大值乘以子数组的长度。

最后,dp[n-1]就是我们需要的结果,即将整个数组分隔变换后能够得到的元素最大和。

3.代码

  
public class 分隔数组 {  static int maxn = 510;  static int[] dp = new int[maxn];  public int maxSum(int[] arr, int k) {  int n = arr.length;  for (int i = 0; i < n; i++) {  dp[i] = 0;  int maxv = arr[i]; // 当前位置的最大值  int cnt = 1; // 当前位置的子数组长度  for (int j = i - 1; j >= Math.max(0, i - k + 1); j--) {  maxv = Math.max(maxv, arr[j]); // 更新最大值  cnt++; // 增加子数组长度  dp[i] = Math.max(dp[i], dp[j] + cnt * maxv); // 更新dp[i]  }  }  return dp[n - 1];  }  public static void main(String[] args) {  分隔数组 solution = new 分隔数组();  int[] arr = {1, 15, 7, 9, 2, 5, 10};  int k = 3;  int result = solution.maxSum(arr, k);  System.out.println(result); // 输出应为84  }  
}

4.知识

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

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

相关文章

【数据结构】数组

第一章、为什么数组的下标一般从0开始编号 提到数组&#xff0c;读者肯定不陌生&#xff0c;甚至还会很自信地说&#xff0c;数组很简单。编程语言中一般会有数组这种数据类型。不过&#xff0c;它不仅是编程语言中的一种数据类型&#xff0c;还是基础的数据结构。尽管数组看起…

Openstack云计算架构及前期服务搭建

openstack介绍 Openstack是一个开源的云计算管理平台项目&#xff0c;由几个主要的组件组合起来完成具体工作&#xff0c;支持几乎所有的云环境&#xff0c;项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台 ----百度百科 Openstack是一个云操作系统&a…

css常用的选择器介绍

CSS&#xff08;层叠样式表&#xff09;选择器是CSS规则的一部分&#xff0c;它用于选择和定位网页上的元素&#xff0c;以便将样式应用到这些元素上。CSS选择器的种类繁多&#xff0c;每种选择器都有其特定的用途、特点和效率。在这篇文章中&#xff0c;我们将讨论一些常用的C…

环境分析检测小剂量移液用耐受硝酸盐酸PFA材质吸管特氟龙移液枪枪头

PFA枪头&#xff0c;为移液枪专业定制&#xff0c;广泛用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验室。地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等一些机构少量移液用。 规格参考:0.1-0.2ml、1ml、2ml、5ml、10ml等。 目前部分规格可适配普…

什么是智能运维产品线和服务线

智能运维产品线和服务线涵盖了一系列自动化和智能化的技术和服务&#xff0c;旨在提升IT运维的效率和有效性。智能运维&#xff08;AIOps&#xff09;利用大数据、分析技术和机器学习能力来自动执行和简化运营工作流程&#xff0c;包括收集和汇总多源IT基础架构组件的数据、应用…

el-checkbox实现全选,反选,单选

<template><div class"box"><el-checkbox v-model"checkAll" :indeterminate"isIndeterminate" change"onAllSelectChange"> 全选</el-checkbox><div class"item" v-for"(item,index) in l…

R语言——条形图数据可视化的多种方式

本文章将会介绍如何使用R语言中的ggplot2包使用条形图进行数据可视化。将会使用一个“生产企业原材料的订购与运输”的订单数据&#xff0c;该数据来自2021数学建模国赛C题。 某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料总体可分为 A B C 三种类…

【C++那些事儿】深入理解C++类与对象:从概念到实践(上)| 揭开this指针的神秘面纱

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 1. 面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符…

【蓝桥杯】快读|min和max值的设置|小明和完美序列|​顺子日期​|星期计算|山

目录 一、输入的三种方式 1.最常见的Scanner的输入方法 2.数据多的时候常用BufferedReader快读 3.较麻烦的StreamTokenizer快读&#xff08;用的不多&#xff09; StreamTokenizer常见错误&#xff1a; 二、min和max值的设置 三、妮妮的翻转游戏 四、小明和完美序列 五…

AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!

文章目录 ⭐ 写在前面⭐ 突破图像处理难点&#xff1a;扫描全能王的独特优势⭐ 耳听为虚&#xff0c;眼见为实⭐ 产品背后的主要核心&#xff1a;AI-Scan助力⭐ 深度学习助力智能文档处理的国际化进程⭐ 品味智能文档处理的轻松与精准 ⭐ 写在前面 在数字化快速发展的今天&…

MySQL 篇-深入了解 DML、DQL 语言(二)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 DML、DQL 语言说明 2.0 使用 DML 实现对数据管理和操作 2.1 DML - 增添数据 insert 2.2 DML - 修改数据 update 2.3 DML - 删除数据 delete 3.0 使用 DQL 实现对…

数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(Forth)

目录 3.爬虫身份识别 4.用户爬虫的例子 4.1 开源爬虫 网络爬虫的组成 控制器 解析器 资源库 3.爬虫身份识别 网络爬虫通过使用http请求的用户代理&#xff08;User Agent&#xff09;字段来向网络服务器表明他们的身份。网络管理员则通过检查网络服务器的日志&#xff0…

77. 组合(力扣LeetCode)

文章目录 77. 组合题目描述回溯算法组合问题的剪枝操作 77. 组合 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4],…

ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?

文章目录 0.引言1.ArcGIS创建点要素2.ArcGIS Server发布点要素3.ArcgisForJS将ArcGIS创建的点要素渲染为热力图 0.引言 ArcGIS For JS 是一个强大的地理信息系统&#xff08;GIS&#xff09;工具&#xff0c;它允许开发者使用 JavaScript 语言来创建各种 GIS 应用。ArcGIS Ser…

DolphinScheduler——介绍及架构设计

目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…

音频混音算法的实现

最近项目有用到混音算法&#xff0c;这里用比较常见的一种&#xff0c;就是简单的加和之后做一下归一化。 是参考这个博主实现的&#xff1a; 音频混音的算法实现 下面直接贴代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <math.h&…

Python学习 day05(异常、模块导入)

异常 为什么要捕获异常 当程序遇到了BUG&#xff0c;如果不对BUG进行手动捕获&#xff0c;那么整个程序就会因为一个BUG而停止运行&#xff0c;这在有些情况下是会造成很大的损失&#xff0c;但是如果我们进行了手动捕获&#xff0c;那么整个程序会继续运行捕获异常的作用在于&…

vue-router4 (六) 命名视图

命名视图可以使得同一级&#xff08;同一个组件&#xff09;中展示更多的路由视图&#xff0c;而不是嵌套显示&#xff0c; 命名视图可以让一个组件中具有多个路由渲染出口&#xff0c;这对于一些特定的布局组件非常有用。 应用场景&#xff1a; 比如点击login切换到组件A&am…

vue3第三节(v-model 执行原理)

特殊说明&#xff1a; 以下vue3语法是基于 3.4之前版本进行使用的&#xff0c;3.4之后的版本 引入了 defineModel 宏&#xff0c;后续会介绍defineModel 1、vue3 与vue2 中v-model区别 vue3 中v-model绑定的不再是value&#xff0c;而是modelValue&#xff0c;接收的方法也不再…

2024-02-28(Kafka,Oozie,Flink)

1.Kafka的数据存储形式 一个主题由多个分区组成 一个分区由多个segment段组成 一个segment段由多个文件组成&#xff08;log&#xff0c;index&#xff08;稀疏索引&#xff09;&#xff0c;timeindex&#xff08;根据时间做的索引&#xff09;&#xff09; 2.读数据的流程 …