HJ103 Redraiment 的走法-最长递增序列

2023-10-27

HJ103 Redraiment 的走法

描述

Redraiment 是走梅花桩的高手。Redraiment 可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替 Redraiment 研究他最多走的步数吗?

数据范围:每组数据长度满足 1≤n≤200 1≤n≤200 , 数据大小满足 1≤val≤350 1≤val≤350

输入描述:

数据共 2 行,第 1 行先输入数组的个数,第 2 行再输入梅花桩的高度

输出描述:

输出一个结果

示例 1

输入:

6
2 5 1 5 4 5

输出:

3

说明:

6 个点的高度各为 2 5 1 5 4 5
如从第 1 格开始走,最多为 3 步, 2 4 5 ,下标分别是 1 5 6
从第 2 格开始走,最多只有 1 步,5
而从第 3 格开始走最多有 3 步,1 4 5, 下标分别是 3 5 6
从第 5 格开始走最多有 2 步,4 5, 下标分别是 5 6
所以这个结果是 3。

题解

最长递增子序列介绍

最长递增子序列(Longest Increasing Subsequence)是一个经典的动态规划问题。给定一个整数序列,找到其中的一个最长子序列,使得子序列中的元素是递增的。

以下是一个使用动态规划解决最长递增子序列问题的示例代码:


import java.util.Arrays;

public class LongestIncreasingSubsequence {
    public static int lengthOfLIS(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int n = nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp, 1); // 初始化每个元素的最长递增子序列长度为1

        int maxLen = 1; // 最长递增子序列的长度

        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            maxLen = Math.max(maxLen, dp[i]);
        }

        return maxLen;
    }

    public static void main(String[] args) {
        int[] nums = {10, 9, 2, 5, 3, 7, 101, 18};
        int length = lengthOfLIS(nums);
        System.out.println("最长递增子序列的长度为:" + length);
    }
}

在上面的代码中,使用一个数组 dp 来存储以第 i 个元素结尾的最长递增子序列的长度。初始化每个元素的最长递增子序列长度为 1。然后,依次遍历数组中的每个元素 nums[i],对于每个元素 nums[i],从第一个元素到第 i-1 个元素进行比较,如果存在比 nums[i] 小的元素 nums[j],则更新 dp[i] = dp[j] + 1。最终的最长递增子序列的长度就是 dp 数组中的最大值。

上述代码的输出结果为:

最长递增子序列的长度为:4

对于给定的整数序列 [10, 9, 2, 5, 3, 7, 101, 18],最长递增子序列是 [2, 5, 7, 101],长度为 4。

最长递增子序列解决问题
import java.util.Scanner;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            //  数据共2行,第1行先输入数组的个数,第2行再输入梅花桩的高度
            //  Redraiment是走梅花桩的高手。
            //  Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。
            //  他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?

            int n = in.nextInt();// 数组的个数
            int []numH = new int[n];

            for (int i = 0; i < n; i++) {
                int h = in.nextInt();// 梅花桩的高度
                numH[i] = h;
            }

            //最长递增子序列
            int []dp = new int [n];
            // 初始化每个元素的最长递增子序列为1
            Arrays.fill(dp, 1);
            // 最长递增子序列的长度
            int max = 1;
            for(int i=1;i<n;i++){
                for(int j=0;j<i;j++){
                    if(numH[j]<numH[i]){
                        dp[i]=Math.max(dp[i],dp[j]+1);
                    }
                }
                max = Math.max(max,dp[i]);
            }
            System.out.println(max);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HJ103 Redraiment 的走法-最长递增序列 的相关文章

随机推荐

  • 读书笔记:多Transformer的双向编码器表示法(Bert)-1

    多Transformer的双向编码器表示法 Bidirectional Encoder Representations from Transformers 即Bert 本笔记主要是对谷歌Bert架构的入门学习 介绍Transformer架构
  • Tkinter的下拉列表Combobox

    tk中下拉列表使用ttk Combobox 代码如下 usr bin env python coding utf 8 import tkinter as tk from tkinter import ttk win tk Tk win ti
  • 基于yolov5的车辆行人道路检测

    一 数据集介绍 本实验使用自动驾驶的公开数据集BDD100K 数据格式 BDD100K 数据集包含10万段高清视频 每个视频约40秒 720p 30 fps 总时间超过1 100小时 视频序列还包括GPS位置 IMU数据和时间戳 视频带有由
  • 闭环系统和开环系统的频域性能指标

    文章目录 1 闭环系统的频域性能指标 1 1 带宽 1 2 谐振频率与谐振峰值 2 开环系统的频域性能指标 2 1 穿越频率 2 2 相角裕度 PM 2 3 增益裕度 GM 3 开环的频域性能指标和闭环的频域性能指标的联系 3 1 开环截止
  • Redis主从、集群、哨兵配置应用

    Redis有四种集群模式 第一个就是主从模式 第二种 哨兵 模式 第三种是 Cluster 集群模式 第四种是单例模式 但是基本上只适用于自己练习 接下来我们重点聊一聊前三种模式 一 主从模式 1 主从复制概述 当其中一台服务器更新之后 服
  • JDBC原理及使用步骤

    1 原理 JDBC API 允许用户访问任何形式的表格数据 尤其是存储在关系数据库中的数据 JDBC中主要的设计模式 桥接模式 主要 工厂模式 单例模式 装饰者模式 2 使用步骤 前提 导包
  • 杭师管科python专业课线上笔记(三):2020真题选填题答案及解析(附代码)

    目录 单选 填空 全部代码 程序设计题 注 以下答案仅为个人所做 不代表标准答案 真题word版需要的话可以评论个邮箱 单选 前五道题在2019年真题时也出现了 毕竟是自命题 可能老师也懒得编新花样 所以是可能有机会做到原题的 1 列表a
  • 没有exec的参与,hasPendingConnections、nextPendingConnection等失效。

    没有exec的参与 hasPendingConnections nextPendingConnection等失效
  • (一) python+Django实现登录页面

    最近因为工作需要 开始捣鼓web框架 接下来就带大家做一个小项目 方便企业内部数据统计 调查问卷 一 操作页 二 数据填写页 三 查询页 首先我们可以找一个自己喜欢的登录页模板 不怕麻烦的话也可以自己写 我套用的是Bootstrap其中的一
  • IIC接口隔离电路ISO

    IIC为例 为什么需要隔离 隔离电路电源和数据线之间的隔离 隔离电性干扰 增强抗干扰能力 保护隔离总线iic确保系统的稳定型和可靠性 避免电源串扰以及避免数字信号对模拟信号的干扰 就需要总线进行信号隔离 就IIC而言 让master和sla
  • html5做微信公众号文章代码,微信公众号文章怎么使用代码排版?

    有了微信公众号后 就要对微信公众号进行运营 微信运营的方式就是推广文章 好的微信文章是最好的吸粉手段 那微信公众号文章怎么使用代码排版 我们一起来看看下文的例子吧 欢迎大家来阅读 需求 简单介绍下西窗烛 App 的信息结构 这是一款古诗词赏
  • 使用WSL2,开启Linux之旅

    使用WSL2 开启Linux之旅 1 确认虚拟环境的开启 2 更新WSL 3 安装ubuntu镜像 4 修改镜像路径 5 更换国内镜像源 6 配置ssh 7 配置远程桌面访问 在开始之前 提供官方链接如何更新及使用WSL 如果觉得官方操作难
  • k8s--基础--22.15--storageclass--类型--本地

    k8s 基础 22 15 storageclass 类型 本地 1 案例 kind StorageClass apiVersion storage k8s io v1 metadata name local storage provisio
  • 目标检测快速入门(含YOLO V1原理详解)

    原创 悬鱼铭 目标检测 Object Detection 任务是计算机视觉中非常重要且热门的研究方向之一 是计算机视觉算法工程师的必考的知识点 本文通过以下几点阐述 目标检测的简介 目标检测的发展 YOLO V1 原理详解 全文总共3千字左
  • DTS Audio Codec 码率

    转自 https www zhihu com question 20816979
  • 两种python实现自动发邮件的方法

    法一 from email mime text import MIMEText from email header import Header from email mime multipart import MIMEMultipart i
  • 集合框架 — ConcurrentHashMap

    集合框架 ConcurrentHashMap 一 ConcurrentHashMap JDK1 7 1 实现结构 2 保证并发安全 分段锁技术 3 put 和 get 方法 二 ConcurrentHashMap JDK1 8 1 实现结构
  • 如何实现网站文件动静分离

    背景 传统动静不分离的产品架构 随着访问量在增长 性能会成为瓶颈 以一个常见的Web站点为例 www acar com是一个刚建立汽车资讯车友交流网站 主站用Php搭建 有10GB的图片素材 部分JS文件 目前购买一台ECS放置所有程序代码
  • 使用Docker安装FastDFS

    1 获取镜像 可以利用已有的FastDFS Docker镜像来运行FastDFS 获取镜像可以通过下载 docker image pull delron fastdfs 也可是直接使用自己下载的镜像备份文件 docker load i 文件
  • HJ103 Redraiment 的走法-最长递增序列

    HJ103 Redraiment 的走法 描述 Redraiment 是走梅花桩的高手 Redraiment 可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替 Redraiment 研究他最多走的步数吗