双端LIS问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
来源:互联网 发布:网络问卷调查网站 编辑:程序博客网 时间:2024/04/28 14:11
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
双端LIS问题(从两端做LIS操作)。我们只要在数组的两端进行一次LIS操作,对应的字串长度分别保存在dp[]和dp2[]中,这样我们只要使得dp[i]+dp2[i]-1最大,这个长度就是满足条件的最长字串。
// DoubleLIS.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#define N 10int dp[N];//表示从A[1]到A[i]中以A[i]结尾的最长上升子序列长度int dp2[N];//表示从A[1]到A[i]中以A[i]结尾的最长下降子序列长度int a[N] = {0,2,1,5,3,6,4,8,9,7};int LIS(int n) //从左往右最长序列的长度{int ans = 1;int i, j;dp[1] = 1;for (i = 2; i < N; i++){int tmp = i;int max = 0;for (j = 1; j < i; j++){//从左向右搜索dp数组,若满足上升序列的条件//1.若a[i] > a[j]//找到dp数组中最大的值,即A[i]之前最大的值//2.若a[i]不满足a[i] > a[j]//则dp[i] = 1if (a[i] > a[j] && dp[j] > max)max = dp[j];}//最大值+1就是dp[i]dp[i] = max + 1;}dp2[N-1] = 1;for (i = N-2; i > 0; i--){int max = 0;for (j = N - 1; j > i; j--){//从右向左搜索dp数组,若满足上升序列的条件//1.若a[i] > a[j]//找到dp数组中最大的值,即A[i]之前最大的值//2.若a[i]不满足a[i] > a[j]//则dp[i] = 1if (a[i] > a[j] && dp2[j] > max)max = dp2[j];}//最大值+1就是dp2[i]dp2[i] = max + 1;} for (i = 1; i < N; i++){if (dp[i]+dp2[i] > ans)ans = dp[i]+dp2[i] - 1;}return ans;}int main(int argc, char* argv[]){printf("%d\n", LIS(N-1)); //从左往右最长序列的长度return 0;}
0 0
- 双端LIS问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
- 从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。 题目描述:
- 在数组中删除尽可能少的数,使得数组满足“先由小到大,再由大到小”
- 输入n个数,分别将这些数从大到小排列输出和从小到大排列输出
- 输入3个从小到大的数,并按从大到小的顺序输出
- 从小到大输出一列数
- 从n个数中找出每个数的重复数
- 三个数按从大到小的顺序排列
- 三个数从大到小
- 三个数,从大到小
- 有十个数按从大到小的顺序存放在一个数组中,输入一个数,要求找出该数是数组中的第几个元素。如果该数不在数组中,则打印出“无此数”
- 从十个数中输出最大数
- POJ 1269 Intersecting Lines(判断两直线关系)
- 非结构体线段树版 ZJU 1610 Count the Colors (线段树区间更新)
- hdu 2087 剪花布条
- Android之ListView中的分隔线
- 嵌入式SQL
- 双端LIS问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
- Linux操作系统中的空闲内存查询(转载)
- 并查集(Union-Find)算法介绍
- Android应用如何开机自启动、自启动失败原因
- URAL 1989 Subpalindromes
- StringCbCopy和StringCchCopy 函数
- 浅谈2to3.py的使用
- libevent源码笔记(二) 使用方法和实例
- /proc/stat 详解