Advertisement

计算子序列的长度

阅读量:

子序列的定义:给定一个序列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)

还没有任何评论哟~