最优子序列(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;
}
对于一串数组,逐个选取,作为子串的最末(最大值)
类似于一个嵌套,即,例如:在第五个选到第四个可以排在前面,第四个可以排在前面的第三个被套进来,第三个可以排在前面的第一个再被套进来;每次只选取可排在前面的一个,即先做整个数组的遍历,再做选取的之前的子序遍历。
标签:前面,int,max,scanf,c++,选取,数组,序列,最优 来源: https://www.cnblogs.com/njust-lxy/p/16088202.html