LIS(最长上升子序列, 合唱队形)

 最长上升子序列

直接使用动态规划:

 这个题目的关键就是在于我们选定一个数,然后利用这个数作为标准和这个数之前的所有数进行比较,如果比前面某一个数要大,那么就需要将这数自己本身的现存的最长长度与比较出来的数的最长加一(这里为什么要加一,因为需要加上前面的长度之外还需要将自己的长度也加上)进行比较,然后取最大。 最后我们还需要在全部所有的数进行一次比较找到最大值,这个最大值就是答案。

这个就是相当于模板 以供后面需要求最长上升子序列的时候使用

代码如下

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[1000000];
int a[1000000];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){for(int j=0;j<i;j++)//这里值得注意的是,这个是将这个和前面所有的数都进行了一次比较{if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+1);}}int ans=-1;for(int i=1;i<=n;i++){if(ans<dp[i])ans=dp[i];}cout<<ans<<endl;return 0;
}

灵感:对于动态规划来说每一个数组元素都有自己的含义,与上下都是存在关系的

 合唱队形

其实这一题也是一个有关最长上升子序列的问题,只不过是先是从1到n求一次上升子序列,然后再是从从n到1求一次上升子序列,然后再在这里面求最优解。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[1000000];
int dp1[1000000];
int a[1000000];
int sum[100000];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){for(int j=0;j<i;j++)//这里值得注意的是,这个是将这个和前面所有的数都进行了一次比较{if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+1);}}for(int i=n;i>=1;i--){for(int j=n+1;j>i;j--)//这里需要注意,初始化是从j=n+1开始的,如果不从n+1开始就会少加上自己{if(a[i]>a[j])dp1[i]=max(dp1[i],dp1[j]+1);}}int ans=-1;for(int i=1;i<=n;i++){sum[i]=dp[i]+dp1[i]-1;}for(int i=1;i<=n;i++){if(ans<sum[i])ans=sum[i];}cout<<n-ans<<endl;return 0;
}

 

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

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

相关文章

Linux学习-C语言-运算符

目录 算术运算符&#xff1a; - * /:不能除0 %:不能对浮点数操作 &#xff1a;自增与运算符 i&#xff1a;先用再加 i:先加再用 --&#xff1a;自减运算符 常量&#xff0c;表达式不可以&#xff0c;--&#xff0c;变量可以 赋值运算符 三目运算符 逗号表达式 size…

OD(13)之Mermaid饼图和象限图

OD(13)之Mermaid饼图和象限图使用详解 Author: Once Day Date: 2024年2月29日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Mermaid使用指南_Once_day的博客-CSDN博客 参考文章: 关于 Mermaid | Mermaid 中文网 (nodejs.cn)Mermaid | Diagramming and charting tool‍‌⁡…

解读人工智能的理论基石

1956年的一个夏天&#xff0c;在达特茅斯学院的一个小会议室里&#xff0c;一群充满好奇和野心的年轻科学家聚集在一起&#xff0c;他们有一个共同的梦想&#xff1a;创造能够模仿人类智能的机器。这不仅仅是科幻小说的情节&#xff0c;更是人工智能历史上一个真实的起点。从那…

react使用@reduxjs/toolkit和react-redux实现store状态管理

一、概述 reduxjs/toolkit和react-redux是用于在React应用中管理全局状态的工具库 1、reduxjs/toolkit&#xff1a; reduxjs/toolkit是Redux官方推荐的工具库&#xff0c;是对 Redux 的二次封装&#xff0c;它提供了一些便捷的API和工具&#xff0c;帮助开发者更快速地编写R…

使用Python,maplotlib绘制树型有向层级结构图

使用Python&#xff0c;maplotlib绘制树型有向层级结构图 1. 效果图2. 源码2.1 plotTree.py绘制层级结构及不同样式2.2 plotArrow.py 支持的所有箭头样式 参考 前俩篇博客介绍了 1. 使用Python&#xff0c;networkx对卡勒德胡赛尼三部曲之《群山回唱》人物关系图谱绘制 2. 使用…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据&#xff0c;如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…

javaWebssh网上超市销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh网上超市销售管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCA…

LeetCode41题:缺失的第一个正数(python3)

这道题写的时候完全没有思路&#xff0c;看了很久的题解&#xff0c;才总结出来。 class Solution:def firstMissingPositive(self, nums: List[int]) -> int:nums_set set(nums)n len(nums)for i in range(1, n 1):if i not in nums_set:return ireturn n 1

使用Haproxy搭建Web群集

1、Haproxy概述。 Haproxy是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS和Nginx。相比较而言&#xff0c;LVS性能最好&#xff0c;但是搭建相对复杂&#xff1b;Nginx的upstream模块支持群集功能&#xff0c;但是对群集节点健康检查功…

手机备忘录导到电脑上有什么方法简单点

在这个信息爆炸的时代&#xff0c;我们每天都在处理海量的信息和待办事项。手机备忘录里记录着重要的灵感、会议安排、待购物品清单……但每次想在电脑上继续编辑或查看时&#xff0c;我都感到无比头疼。难道就没有一种简单的方法&#xff0c;能让手机备忘录和电脑轻松同步吗&a…

Python 编程语言以及相关的库和工具来进行金融市场数据分析、策略开发和交易执行的过程。

Python 量化是指利用 Python 编程语言以及相关的库和工具来进行金融市场数据分析、策略开发和交易执行的过程。 Python 由于其简洁、易学、强大的生态系统和丰富的金融库而成为量化交易的首选编程语言之一。 量化交易在金融领域得到广泛应用&#xff0c;它允许交易者通过系统…

day57 集合 List Set Map

List实现类 List接口特点&#xff1a;元素有序 可重复 Arraylist 可变数组 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值为0&#xff0c;添加数据时&#xff0c;容量为10&#xff1b; ArrayList与Vector的区别&#xff1f; LinkList&#xff1a;双向链表 优点&#xff1…