一本通:1259:【例9.3】求最长不下降序列

题目:1259:【例9.3】求最长不下降序列(http://ybt.ssoier.cn:8088/problem_show.php?pid=1259)

一本通:1259:【例9.3】求最长不下降序列_第1张图片

思路:

令f[i]为从1到i的最长不下降序列长度

假设a[i]<=a[j],那么就构成了一个不下降序列(不用相邻)

假如加上这个数,序列比原来更长,那么就加上;若序列没有原来长,那么就不变

所以状态转移方程为f[i]=f[j]+1或f[i]不变

最后输出的长度即为所有长度中最长的

输出序列时,从记下的最后一个下标往前输出(用递归思想)

代码:

#include
using namespace std;

void out(int x,int m[],int k);
int a[201];

int main()
{
	int n,i,j,f[201]={0},p[201]={0},maxn=0,l;  //令f[i]为从1到i的最长不下降序列长度  
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		f[i]=1; //每一个数最少都有本身长度
	}
	for(i=1;i=a[i]&&f[j]

你可能感兴趣的:(一本通)