当前位置:   article > 正文

子序列个数_子序列的定义:对于一个序列a=a[1]a[2]......a[n]。则非空序列a'=a[p1]a[p

子序列的定义:对于一个序列a=a[1]a[2]......a[n]。则非空序列a'=a[p1]a[p2]...

题目:

子序列的定义:对于一个序列a=a[1],a[2],......a[n],则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列
其中1<=p1<p2<.....<pm<=n。 例如:4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。
 - 对于给出序列a,有些子序列可能是相同的,这里只算做1个。
 - 要求输出a的不同子序列的数量。

 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*说明:参考http://blog.csdn.net/thebestdavid/article/details/11908961
  4. */
  5. int getSubNumOfArray(int *a, int n)
  6. {
  7. int i;
  8. int j;
  9. int dp[25];
  10. int visit[121] = {0};
  11. dp[0] = 0;
  12. for (i=1; i<n; i++)
  13. {
  14. if (visit[a[i]] != 0)
  15. {
  16. dp[i] = 2*dp[i-1]-dp[visit[a[i]]-1];
  17. }
  18. else
  19. {
  20. dp[i] = 2*dp[i-1]+1;
  21. }
  22. visit[a[i]] = i;
  23. }
  24. return dp[n-1];
  25. }
  26. int main()
  27. {
  28. int a[] = {4, 1, 2, 3, 2};
  29. printf("%d\n", getSubNumOfArray(a, 5));
  30. return 0;
  31. }


 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/75056
推荐阅读
相关标签
  

闽ICP备14008679号