动态规划_最大非降子序列的长度
来源:互联网 发布:迭代器java 线程安全 编辑:程序博客网 时间:2024/06/05 08:42
最长非降子序列问题:longest increasing subsequence
给定一整型数列{a1,a2...,an}(n>0),求最大的非降子序列的长度。
如:1 9 10 5 11 2 13的最长非降子序列是1 9 10 11 13,长度为5。
状态转移方程 dp【i】=max(dp【j】+1) ( j < i 且a [ i ] > =a[ j ])
用大白话解释就是: 想要求dp[i],就把i前面的各个子序列中,最后一个数不大于a[i]的序列长度+1,然后取出最大的长度即为dp[i];
求出各个子序列长度dp[i]后,最终的结果就是dp数组中最大的值.
#include<iostream>#include<vector>int lis(std::vector<int>& vec){ //res保存所有的状态, //res[i]表示以vec[i]为结尾的子序列长度 //初始化为1 std::vector<int> res(vec.size(),1); //length保存最大的长度 int length=0; for(int i=0; i< vec.size(); ++i) { for(int j=0; j<i; ++j) { if(vec[i] >= vec[j]) //状态转移方程 res[i]= std::max(res[j]+1,res[i]); } if(res[i] > length) length = res[i]; } //打印所有的状态 for(int n=0 ; n< res.size() ; ++n) std::cout <<n <<" : " << res[n] << std::endl; //返回最大长度 return length;}int main(){ int arr[]={5,3,3,4,8,6,7,9,4,2}; std::vector<int> vec( arr , arr+sizeof(arr)/sizeof(int) ); std::cout << "lis's length is :" << lis(vec) << std::endl; return 0;}
1 0
- 动态规划_最大非降子序列的长度
- 动态规划_最大公共子序列长度问题
- java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串
- 动态规划——最长非降子序列的长度
- 最长上升非降子序列的长度动态规划
- 动态规划_题目1011:最大连续子序列
- 动态规划6_最大连续子序列和
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- 动态规划_最大子序列和问题以及最大子序列问题
- 求最大子序列长度及最大字段和 --动态规划法C++语言
- 动态规划-3003-序列的最大上升子序列
- 动态规划:求一个序列的最大子序列和
- 【动态规划】最大子序列
- 动态规划03—最长非降子序列的长度(LIS)
- 动态规划之配对链最大长度
- hud1151 动态规划 最大的公共子序列
- hdu1231最大连续子序列(简单的动态规划)
- 动态规划--连续子序列的最大和
- A*算法实现八数码问题
- Stringbuffer的一般用法
- Select2的用例
- 安卓学习笔记---Android播放Gif图片
- 移动端的三种输入方式
- 动态规划_最大非降子序列的长度
- 淘宝移动web自适应
- Objective-C Class Loading and Initialization
- Eclipse背景颜色修改:
- ncverilog和irun的区别
- JDBC对数据库的增删改查
- poj3159Candies_差分约束系统解决_转换(spfa算法)
- unix-文件i/o学习笔记
- 堆排序