动态规划-最长不下降子序列LIS

找出一组数据中最长的不下降子序列的长度。
1,连续情况。
即必须要求子数列连续相依
1 2 3 -1 -2 7 9中的最长子序列为3(1,2,3)
易得递推公式:if(f[i]>=f[i-1]) dp[i] = dp[i-1]+1;
else dp[i] = 1;

#include
using namespace std;
#define maxn 105
int f[105];
int dp[105];
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i=f[i-1]) dp[i] = dp[i-1]+1;
		}
		printf("%d\n",dp[n-1]);
	} 
}

2,非连续情况
不必要求子数列连续相依
例如:1,2,3,-1,-2,7,9的最长不下降子序列为:1,2,3,7,9
递推公式为dp[i] = dp[j]+1(j

#include
using namespace std;
#define maxn 105
int f[105];
int dp[105];
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i

你可能感兴趣的:(动态规划-最长不下降子序列LIS)