当前位置: 首页 > article >正文

【DP动态规划】最长子序列

问题描述:

 

解题分析:

采用 DP 动态规划的方法

先设置 f(1)=1;

其次在计算出 f(2),再依次计算出后续的 f 的数值

例F(3)是如何计算出来的:

首先判断a【3】是否大于a【1】,确实大于,故F(3)=F(1)+ 1 = 2;

再判断a【3】是否大于a【2】,不大于,不操作

但是需要注意的是,如果a【2】=1.5,那么F(3)=F(2)+ 1 = 2 + 1 = 3【此时F(3)的数值需

要更新】

如下图:

 

按照这个规律依次计算即可;

解题代码:

//最长上升子序列 
#include <bits/stdc++.h>
using namespace std;
const int vinf = 1e6+100;
int lin[vinf];    //最大空间
int val[vinf]; 
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>lin[i];
	}
	val[1]=1;  //初始起点 
	//读取完数组,开始处理
	for(int i=2;i<=n;++i){
		int pp=0;     //用来记录循环比较时最大的那个数,每一轮都要初始化为0 
		for(int j=1;j<i;++j){
			//依次比较
			if(lin[i]>lin[j]){
				if(val[j]+1 >= pp){
					pp = val[j]+1;
				}
			} 
		}
		val[i]=max(1,pp);
	}
	int ans=-1;
	for(int i=1;i<=n;i++){
		if(val[i]>ans)
			ans=val[i];
	}
	cout<<ans<<endl;
	return 0;
}

哪些问题适用于DP算法解决?

 


http://www.kler.cn/a/1582.html

相关文章:

  • 【C++习题】20. 两个数组的交集
  • C语言的语法
  • vue2日历组件
  • 使用python将多个Excel表合并成一个表
  • 计算机网络(第8版)第3章--PPP课后习题
  • 【Qt】C++11 Lambda表达式
  • [数据分析与可视化] Python绘制数据地图1-GeoPandas入门指北
  • string类(下)
  • 如何优雅地让谷歌浏览器中的网页旋转90度?掌握这个技巧,让你的网页与众不同!
  • linux kernel 5.0 inline hook框架
  • Mysql常用命令
  • 尚融宝07-前端模块化
  • 2023年网络安全最应该看的书籍,弯道超车,拒绝看烂书
  • 【C++编译】gcc、gdb、make、cmake
  • 论文阅读和分析:Mathematical formula recognition using graph grammar
  • 线程安全(重点)
  • 202304读书笔记|《不被定义的女孩》——做最真实最漂亮的自己,依心而行
  • 2023秋招前端面试必会的面试题
  • 多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码
  • STM32开发(九)STM32F103 通信 —— I2C通信编程详解
  • springcloud3 nacos,sentinel,ribbon,openfegin等整合案例4[fallback+blockhandler完美整合]
  • 基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
  • 门面设计模式
  • C#等高级语言运行过程
  • CSDN周赛第37期题解(Python版)
  • 近期投简历、找日常实习的一些碎碎念(大二---测试岗)