2024/3/27打卡接龙数列——动态规划(线性DP/最长上升子序列)

目录

题目

思路

代码


题目

思路

        这个题求最少删除多个个数,其实是求最长的接龙数列,用总个数-接龙数列的个数就是最少删除的个数。

        那么如何求解最长的接龙数列的问题。

        思考,每个数都有选或不选的两种选项(选:可以接龙前面;不选:自己本身作为一个接龙数列)。可以想到是 动态规划问题。

        然后我就写代码了,时间复杂度是O(n^2),只能过一半的数据。(ps:我以为是01背包问题,但是状态表示出来又不是,没想到是最长上升子序列问题)

        后面发现是最长上升子序列的问题,因为后面的数都受前面的数的影响,因此DP分析与最长上升子序列相同,就如上图所示。

2024/3/5打卡最长上升子序列**----线性DP,贪心,单调栈-CSDN博客

// 只能过一半的版本,超时
import java.io.*;
import java.util.*;

class Main{
    static int N = 100010;
    static int n;
    static String[] a = new String[N];
    static int[] f = new int[N]; 
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(in.readLine());
        String[] s = in.readLine().split(" ");

        f[0] = 1; // 自己本身也可以作为接龙数列
        for(int i=1;i<n;i++){
            f[i] = 1;
            for(int j=0;j<i;j++){ // 从 0~i-1,看前面的是否能接龙当前数字
               if (s[j].charAt(s[j].length() - 1) == s[i].charAt(0)) { // 即前面的数的最右边的数字是否跟当前这个数最左边的数相同
                    f[i] = Math.max(f[i], f[j] + 1); // 相同的话就取最大值
                }
            }
        }
        
        int res = 0;
        for(int i=0;i<n;i++) res = Math.max(res,f[i]);
        System.out.println(n-res);
    }
}

        因为 N 的范围是100000,因此要保证在O(nlogn)范围内 。

        只能优化第二重循环。可以发现的是第二重循环我们没有必要每一个都遍历一遍,

  •         1.有些根本不能接龙上,
  •         2.接上也有可能被后面的更长的数列更新掉。

        因此如果到第 i 个数,我们只需要找 以 i 的左边第一个数结尾的接龙数列的最大长度以及数的位置。

        用position[ ] 记录以 [0~9] 结尾的接龙数列的最远位置

        用p_max[ ] 记录以  [0~9] 结尾的接龙数列的最大长度(最大长度对应的位置就是相应的最远位置)

代码

有些乱 ,看注释就懂了

import java.io.*;
import java.util.*;

class Main{
    static int N = 100010;
    static int n;
    static int[] position = new int[10]; // 存储以 [0~9] 结尾的接龙长度最大的位置
    static int[] p_max = new int[10]; // 存储以 [0~9] 结尾的接龙长度最大的长度
    static int[] f = new int[N]; // dp
    
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(in.readLine());
        String[] s = in.readLine().split(" ");
        
        Arrays.fill(position,-1); // 因为数组从0 来说,所以我需要初始化position,
        f[0] = 1; // 单独一个也算一个长度接龙
        position[Integer.parseInt(String.valueOf(s[0].charAt(s[0].length()-1)))] = 0; // 第一个数的个位数位置
        p_max[Integer.parseInt(String.valueOf(s[0].charAt(s[0].length()-1)))] = 1; // 以第一个数的个位数结尾的最大长度的个数
        
        for(int i=1;i<n;i++){
            f[i] = 1;
            int tail = Integer.parseInt(String.valueOf(s[i].charAt(s[i].length()-1))); // 取出最右边的数
            int front = Integer.parseInt(String.valueOf(s[i].charAt(0)));  // 最左边的数
            int mx = position[front]; // 以左边的数字结尾的最远位置
            if(mx!=-1) // 如果有接龙数列的话
                f[i] = f[mx]+1;
            if(f[i]>=p_max[tail]){ // 如果以i最右边的数结尾的接龙数列长度大于当前的长度,更新以tail结尾的结论数列
                position[tail] = i;
                p_max[tail] = f[i];
            }
        }
        
        int res = 0;
        for(int i=0;i<n;i++) res = Math.max(res,f[i]);
        System.out.println(n-res);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)

【C00384】基于&#xff08;JavaWeb&#xff09;Springboot的民航网上订票系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

Pillow教程04:学习ImageDraw+Font字体+alpha composite方法,给图片添加文字水印

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

在FMEA风险控制中,首检的重要性!——SunFMEA软件

在制造业中&#xff0c;FMEA被广泛应用于产品设计、生产过程和产品服务的各个阶段。而首检&#xff0c;作为生产过程中的一个重要环节&#xff0c;同样承载着风险控制和质量保障的重任。 今天SunFMEA软件系统从FMEA风险控制的角度来看&#xff0c;首检具有至关重要的地位。首检…

VS Code配置C/C++环境

1.插件安装完之后最好重启一下软件&#xff0c;这样就可以对插件的配置进行修改 2.配置C/C环境按这篇博客来&#xff0c;基本就能成功。 【C/C】vscode配置C/C环境-CSDN博客 3. 参见&#xff1a; win10下vscode配置c语言环境-阿里云开发者社区 (aliyun.com)

蓝牙耳机什么牌子好?拒绝跟风购买!五大良心品牌推荐

​真无线蓝牙耳机已经成为我们日常生活中不可或缺的数码产品。随着技术的发展&#xff0c;人们对蓝牙耳机的要求越来越高&#xff0c;不仅要求音质出众&#xff0c;还希望长时间佩戴也能保持舒适&#xff0c;并能适应多种使用场景。挑选蓝牙耳机确实需要一些技巧。所以&#xf…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

中科数安——企业文件资料防泄密|数据防泄密|透明加密系统|源代码防泄露

#文件防泄密软件# 中科数安作为领先的信息安全解决方案提供商&#xff0c;专注于为企业及机构提供全面的文件资料防泄密和数据防泄漏解决方案&#xff0c;具体产品和服务涵盖以下几个方面&#xff1a; 中科数安 || 文件资料、数据防泄密系统 PC地址&#xff1a;www.weaem.com …

2024高安全个人密码本程序源码 可生成随机密码/备忘录/二代密码(带安装教程)

Youngxj Pwd 您的贴身密码管家 在这个网络发达的年代&#xff0c;人人都需要上网&#xff0c;一旦上网就不难避免需要用到账号密码&#xff0c;在账号众多的情况下&#xff0c;你是否还在为你复杂难记的密码担忧着&#xff0c;现在只需要记录一次&#xff0c;就可以随时查看你的…

YOLO中的预训练模型是否需要

这张图片显示的是使用YOLOv5&#xff08;一种流行的物体检测算法&#xff09;进行训练时的一段命令行指令以及对应的注释&#xff0c;这些注释是中文的。这里列出的是两个不同情况下的命令行用法。 上面的命令&#xff1a; python train.py --data custom.yaml --weights yolo…

【小黑送书—第十四期】>>重磅升级——《Excel函数与公式应用大全》(文末送书)

今天给大家带来AI时代系列书籍&#xff1a;《Excel 2019函数与公式应用大全》全新升级版&#xff0c;Excel Home多位微软全球MVP专家打造&#xff0c;精选Excel Home海量案例&#xff0c;披露Excel专家多年研究成果&#xff0c;让你分分钟搞定海量数据运算&#xff01; 由北京…

20240326,文件,格式化文件输入输出,二进制文件

一&#xff0c;文件 1.1 格式化输入和输出 1.1.1 FLAG -左对齐 在前面放或— (SPACE) 正数留空 0-0填充 //%[flag][width][.prec][hIL]type #include<stdio.h> int main(int argc,char const *argv[]){int i1234;printf("%d\n",i);printf…

AI论文速读 | 【综述】用于轨迹数据管理和挖掘的深度学习:综述与展望

论文标题&#xff1a;Deep Learning for Trajectory Data Management and Mining: A Survey and Beyond 作者&#xff1a;Wei Chen(陈伟), Yuxuan Liang(梁宇轩), Yuanshao Zhu, Yanchuan Chang, Kang Luo, Haomin Wen(温皓珉), Lei Li, Yanwei Yu(于彦伟), Qingsong Wen(文青…

借力AI+视频号电商,腾讯广告业务这驾马车能跑多远?

腾讯的“功劳簿”又添上了几笔。 日前&#xff0c;腾讯披露了2023年四季度及全年财报。报告显示&#xff0c;2023年&#xff0c;腾讯营收6090.15亿元&#xff0c;同比增长10%&#xff1b;调整后净利润&#xff08;Non-IFRS&#xff09;1576.88亿元&#xff0c;同比增长36%。 …

Git学习笔记之基础

本笔记是阅读《git pro》所写&#xff0c;仅供参考。 《git pro》网址https://git-scm.com/book/en/v2 git官网 https://git-scm.com/ 一、git起步 1.1、检查配置信息 git config --list查看所有的配置以及它们所在的文件 git config --list --show-origin可能有重复的变量名…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(十): 聚酰亚胺PI薄膜的用途是什么

聚酰亚胺PI薄膜的用途是什么 聚酰亚胺&#xff08;Polyimide&#xff0c;简称PI&#xff09;薄膜由于其独特的性能&#xff0c;被广泛用于多个领域。聚酰亚胺薄膜市场可分为挠性电路板(FPC)、特种制品、压敏胶带、电机/发电机、电线电缆等。目前在国内各类下游需求中&#xff…

HTML(一)---【基础】

零.前言&#xff1a; 本文章对于HTML的基础知识处理的十分细节&#xff0c;适合从头学习的初学者&#xff0c;亦或是想要提升基础的前端工程师。 1.什么是HTML&#xff1f; HTML是&#xff1a;“超文本标签语言”&#xff08;Hyper Text Markup Language&#xff09; HTML不…

如何提升买家对独立站的信任感?提升转化率的技巧

跨境电商独立站获得爆发式增长&#xff0c;有越来越多的商家开始尝试建自己的独立站。同时我们在社群里获得反馈&#xff0c;很多商家在建站初期&#xff0c;普遍都会面临一个问题&#xff1a; 好不容易从各个渠道引流到独立站&#xff0c;转化率却不高&#xff0c;没有订单。 …

探究网络延迟对事务的影响

1.背景概述 最近在做数据同步测试&#xff0c;需要通过DTS将kafka中的数据同步到数据库中&#xff0c;4G的数据量同步到数据库用了大约4个多小时&#xff0c;这看起来并不合理&#xff1b;此时查看数据库所在主机的CPU&#xff0c;IO的使用率都不高&#xff0c;没有瓶颈&#…

爬虫技术与IP代理池:数据采集的利器

文章目录 1、 爬虫技术的概念和原理1.1 爬虫的角色&#xff1a;1.2 爬虫的工作流程&#xff1a;1.3技术挑战和解决方案&#xff1a; 2、 IP代理池的功能和优势2.1 功能描述&#xff1a;2.2 优势描述&#xff1a;2.3 应用场景&#xff1a; 3、 IP代理池推荐 在当今数字化时代&am…

两种利用matplotlib绘制无填充的多边形的方法:ax.fill()和Polygon

两种利用matplotlib绘制无填充的多边形的方法&#xff1a;ax.fill()和Polygon 下面我们将使用np.rand随机生成5个多边形的顶点&#xff0c;使用不同的方法绘制多边形。 ax.fill()绘制多边形 函数原型为&#xff1a; Axes.fill(*args, dataNone, **kwargs) args参数指的是按x…