计算子序列的长度
发布时间
阅读量:
阅读量
子序列的定义:给定一个序列a=a[1],a[2],......a[n],若存在一个非空序列a'=a[p1],a[p2]......a[pm],其中满足1<=p1<p2<.....<pm<=n,则称该序列为原序列的一个子序列。
例如:4,14,2,3以及14,1,2,3均为4,13,14,1,2,3的子序列。
在给定序列a的情况下,可能存在多个相同的子序列,此时仅将其视为一个实例。要求计算该序列中所有不同子序列的数量。
输入:一个长度为n的数组,其中满足条件1<=n<=100,数组中的每个元素均满足0<=a[i]<=110。
输出:所有不同子序列的数量模上1000000007的结果(由于结果可能较大,因此只需输出取模后的数值)。
解答:
方法一:采用递归方式求解。然而该方法的时间复杂度较高。
方法二:采用线性时间复杂度o(n)的方式。通过记录以每个数字结尾的子序列数量,并依次进行累加运算。
#include <iostream>
#include<cmath>
using namespace std;
int get_seri_len(int *a ,int begin, int end){
int num[111] = {0};
全部评论 (0)
还没有任何评论哟~
