算法题:
明确问题:
- 求一串数的最长递减序列,输出个数。
解题思路:
- 用一个数组 a[N] 记录录入的数据
- 用数组 b[N] 记录这个数据在结果中的位置,ab位置一一对应
- 没读入一个数,重后往前扫描
- 找到一个比他大,且b[i] 最大的加一赋值给b[j]。
- 最后找出这个最大的b就是结果。
代码示例:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n; //输入数据的个数
int max=0; //记录最长的长度
int a[100]; //记录数据
int b[100]; //如果结果含有这个数据,则是第几位
for(int i=0;i<n;i++){
b[i] = 1;
cin >> a[i];
if(i!=0)
for (int j = i-1; j >= 0; j--) {
if (a[j] >= a[i]) {
if (b[j]+1 > b[i]) {
b[i] = b[j] + 1;
}
}
}
if (b[i] > max)
max = b[i];
}
cout<<max<<endl;
return 0;
}