最长递增子序列
来源:互联网 发布:js怎么给文本框赋值 编辑:程序博客网 时间:2024/06/07 15:29
最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点。
在一个已知的序列 {
若在子序 列中,当下标
有序列 {
假设,F[1]到 F[
F[x]=max{1,F[j]+1 |
我们给出求序列{1,4,3,2,6,5}的最长递增子序列长度的所有 F[i]供读者参考:
F[1]=1;
F[2]=max{1, F[1]+1 }=2;
F[3]=max{1, F[j]+1 |
………
【求解最长递增子序列代码如下:】
#include<iostream>using namespace std;int max(int a,int b)///取最大值函数 { return a>b?a:b;}int main(){ int list[51],n; int dp[51];///dp[i]保存以第i个数据结尾的最长递增子序列长度 cin>>n; for(int i=1;i<=n;i++)//录入序列数据 { cin>>list[i]; } for(int i=1;i<=n;i++)//按照数组顺序确定每一个dp[i] { int tmax=1;//最大值的初始值为1,即以其结尾的最长递增子序列长度至少为1 //f[i]=max {1, f[j]+1|j<i && list[j]<list[i]} for(int j=1;j<i;j++)//遍历其前所有数据元素 { if(list[j]<list[i])//若第j个比当前的值要小 tmax=max(1,dp[j]+1);//将当前元素i排列在j号结尾的最长递增子序列之后,计算其长度dp[j] + 1,若大于当前最大值,则更新最大值 } dp[i]=tmax; }//求出dp的最大值即可int ans=1;for(int i=1;i<=n;i++){ ans=max(ans,dp[i]);}cout<<ans<<endl;}
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 星系炸弹
- 一个共同开发的简易流程
- Windows+SSD
- c++中缀表达式转后缀表达式并计算
- 121. Best Time to Buy and Sell Stock
- 最长递增子序列
- 前端性能优化总结
- 搭建Mac下的OpenGL环境
- 【java 4】---根据名称或类型 完成自动装配
- caffe学习笔记27-ResNet论文笔记
- 算法
- nginx配置-优化静态资源
- Linux 简单的shell实现
- C语言截取字符串