算法分析:这是个动态规划的问题,先求其子集,保存子集的结果,然后在子集的基础上再进行计算。此题要求最大升序子序列的长度,可以逆向考虑,先计算以第i个数为终点的最大升序子序列的长度,然后计算i后面的类似子序列。遍历的时候从首部开始,依次计算,最后求出最大的升序子序列。
数据结构:使用数组,vector.
代码实现:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct num{
int index;
int number;
int longest;
};
int main(){
vector<num> v;
num ele;
int Nblock;
int Nelement;
int enumber;
cin>>Nblock;
for(int t = 0;t < Nblock;t++){
v.clear();
cin>>Nelement;
for(int i = 0;i < Nelement;i++){
cin>>enumber;
v.push_back(ele);
v[i].index = i;
v[i].number = enumber;
if(i == 0){
v[i].longest = 1;
continue;
}
int maxlo