C/C++教程

最优子序列(c++)

本文主要是介绍最优子序列(c++),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

参考:https://blog.csdn.net/qq_37630072/article/details/78133235

#include<cstdio>
#include<algorithm> //这个头文件可以使用max(,),*max_element(,)
using namespace std; //它们的含义分别是:求两者最大;求数组最大
int n,a[1002],f[1002];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]); //输入
f[i]=1; //以第i个数为末尾的上升序列最初长度为1
}
for(int i=1;i<=n;i++) //枚举i的位置
for(int j=1;j<i;j++) //在i的前面找j的位置
if(a[i]>a[j]) //如果满足条件,则第i个数可以放在j后边
f[i]=max(f[j]+1,f[i]);//取较大的一种再放
printf("%d",*max_element(f+1,f+n+1));//从 F[1]到F[n] 找最大值
return 0;
}

 

对于一串数组,逐个选取,作为子串的最末(最大值)

类似于一个嵌套,即,例如:在第五个选到第四个可以排在前面,第四个可以排在前面的第三个被套进来,第三个可以排在前面的第一个再被套进来;每次只选取可排在前面的一个,即先做整个数组的遍历,再做选取的之前的子序遍历。

 

这篇关于最优子序列(c++)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!