博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1202 子序列个数(DP)
阅读量:7029 次
发布时间:2019-06-28

本文共 1424 字,大约阅读时间需要 4 分钟。

题目来源: 
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 
子序列的定义:对于一个序列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的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。
 
Input
第1行:一个数N,表示序列的长度(1 <= N <= 100000)第2 - N + 1行:序列中的元素(1 <= a[i] <= 100000)
Output
输出a的不同子序列的数量Mod 10^9 + 7。
Input示例
41232
Output示例
13 //容易想到是 dp ,dp[i] 以 i 位置为结尾的子序列个数
1  # include 
2 # include
3 # include
4 # include
5 # include
6 # include
7 # include
8 # include
9 # include
10 # include
11 # include
12 # include
13 # include
14 # pragma comment(linker,"/STACK:102400000,102400000")15 using namespace std;16 #define MOD 100000000717 #define INF 0x3f3f3f3f18 #define LL long long19 #define MX 10000520 21 int n;22 int dat[MX];23 int zhi[MX];24 int pre[MX];25 LL sum[MX];26 LL dp[MX];27 28 int main()29 {30 scanf("%d",&n);31 for (int i=1;i<=n;i++)32 {33 scanf("%d",dat+i);34 pre[i] = zhi[dat[i]];35 zhi[dat[i]] = i;36 }37 for (int i=1;i<=n;i++)38 {39 if (pre[i]==0)40 dp[i] = (sum[i-1] + 1)%MOD;41 else42 dp[i] = (sum[i-1] - sum[pre[i]-1] + MOD)%MOD;43 sum[i] = (sum[i-1] + dp[i])%MOD;44 }45 printf("%lld\n",sum[n]);46 return 0;47 }
View Code

 

 

转载于:https://www.cnblogs.com/haoabcd2010/p/7668172.html

你可能感兴趣的文章
二.hadoop环境搭建
查看>>
深海机器人问题
查看>>
ios开发之 -- invalid nib registered for identifier
查看>>
MySQL 通过semi join 优化子查询
查看>>
socket编程-服务器端
查看>>
L181 The microscopic structure of a cat’s tongue helps keep its fur clean
查看>>
django序列化单表的4种方法的介绍
查看>>
迭代(遍历)时候不可以使用集合的remove和add方法,但可使用Java迭代器的remove和add方法...
查看>>
记录MYSQL中SQL语句的一个坑.
查看>>
网页基础
查看>>
在Oracle中设置主键自增
查看>>
正则表达式(括号)、[中括号]、{大括号}的区别小结
查看>>
HTML基础第十讲---排版卷标
查看>>
88.NODE.JS加密模块CRYPTO常用方法介绍
查看>>
java.net.ProtocolException: Exceeded stated content-length of: '13824' bytes
查看>>
asp.net 连接 oracle10g 数据库
查看>>
C 入门 第十一节
查看>>
HTML简单的注册页面搭建
查看>>
例23:选择排序
查看>>
【06】Vue 之 组件化开发
查看>>