最长递增子系列(LIS)
来源:互联网 发布:天津软件培训 编辑:程序博客网 时间:2024/06/06 12:42
最近遇到的,此代码来自《算法导论》
具体代码如下:
#include <iostream>#include <fstream>using namespace std;#define INF -99999int find(int* arr, int len, int n){int left = 0, right = len, mid = (left+right)/2;while (left <= right){if(n > arr[mid])left = mid + 1;else if(n < arr[mid])right = mid - 1;elsereturn mid;mid = (left + right)/2;}return left;}int main(int argc, char* argv[]){ifstream m_cin("testLIS.txt");int n, a[100], c[100], i, j, len;while(m_cin >> n){for(i = 0; i < n; i++){m_cin >> a[i];}//这里把 c[0] 设为一个非常小的负数只是为了方便//对数组下标的操作,属于一个小小技巧而已c[0] = INF;c[1] = a[0];len = 1;for(i = 1; i < n; i++){j = find(c, len, a[i]);c[j] = a[i];if(j > len)len = j;}cout << "最长递增子系列长度为:" << len << endl;}system("pause");return 0;}
值得注意的是,算法结束后数组c中记录的并不是一个符合题意的最长上升子序列!
好好体会,不能理解的话,举个小例子来观察规律是个好方法!
0 0
- 最长递增子系列(LIS)
- 最长递增子序列问题((LIS))
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)求解
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)问题
- 单调递增最长子序列(Lis)
- 最长递增子序列(LIS)
- 最长单调递增子序列(LIS)
- 最长递增子序列(LIS)问题
- 最长递增子序列(LIS)
- 最长递增子序列(LIS)
- LIS问题(最长递增子序列)
- Eclipse 3.1 中使用TestNG:基于注释的单元测试框架
- FFMPEG推送rtmp流实例
- scoi2008奖励关&&bzoj1076
- 反射之暴力反射
- RHEL/CentOS下 Oracle 11g客户端配置
- 最长递增子系列(LIS)
- 二分查找
- cocos2dx 中Layer的锚点
- MySQL索引背后的数据结构及算法
- linux线程池的实现——bobo
- Doxygen1.8.5+GraphViz2.34 构建源代码帮助文档
- IPUtils
- MFC中用户界面元素更新原理(UPDATE_COMMAND_UI)
- 个人Android开发习惯