题意:求子序列种数

思路:dp[i]代表到i的所有种数,把当前i放到末尾,那么转移方程dp[i] = dp[i - 1] + dp[i -1],但是可能存在重复,比如1 2 3 2,在第2位置的时候出现12,但是在第4位置的时候,还是可能出现12,那么我们要减掉多出来的,就是减去dp[1]这里加2的部分。也就是减去相同数字的前一个的种数。

代码:

#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include <iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
const int M = 50 + 5;
const ull seed = 131;
const int INF = 0x3f3f3f3f;
const ll MOD = 1000000007;
ll dp[maxn];
int a[maxn], pre[maxn];
int main(){int n;while(~scanf("%d", &n)){for(int i = 1; i <= n; i++){scanf("%d", &a[i]);}dp[0] = 1;memset(pre, 0, sizeof(pre));for(int i = 1; i <= n; i++){dp[i] = (dp[i - 1] * 2) % MOD;if(pre[a[i]] != 0){dp[i] = (dp[i] - dp[pre[a[i]] - 1] + MOD) % MOD;}pre[a[i]] = i;}printf("%lld\n", dp[n] - 1);}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11213194.html

FZU 2129 子序列个数(DP)题解相关推荐

  1. FZU 2129 子序列个数 (递推dp)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...

  2. 1202 子序列个数

    1202 子序列个数 子序列的定义:对于一个序列a=a[1],a[2],......a[n].则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1< ...

  3. 字符串的回文子序列个数_计算给定字符串中回文子序列的数量

    字符串的回文子序列个数 Problem statement: 问题陈述: Given a string you have to count the total number of palindromi ...

  4. 求最长递增子序列个数——C++

     声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一.下面是原题描述 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] ...

  5. 2015编程之美资格赛 回文子序列个数

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...

  6. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解

    全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...

  7. 牛客题霸 [ 最小的K个数] C++题解/答案

    牛客题霸 [ 最小的K个数] C++题解/答案 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题解: 如果有n&l ...

  8. 牛客题霸 [二进制中1的个数] C++题解/答案

    牛客题霸 [二进制中1的个数] C++题解/答案 题目描述 输入一个整数,输出该数32位二进制表示中1的个数.其中负数用补码表示. 题解: 判断1的个数 x&(-x)=2^k 有点类似于树状数 ...

  9. 力扣 统计各位数字都不同的数字个数 C++ 题解

    力扣 统计各位数字都不同的数字个数 C++ 题解 文章目录 力扣 统计各位数字都不同的数字个数 C++ 题解 一.完整题目 二.具体思路 三.编写代码 四.测评结果 五.总结评价 一.完整题目 给你一 ...

  10. leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)

    题目 https://leetcode.com/problems/delete-operation-for-two-strings/ 题解 本题实质上是个最长公共子序列问题,又是经典的 递归-> ...

最新文章

  1. Vue axios 中提交表单数据(含上传文件)
  2. winform c#绑定combobox下拉框 年度代码。
  3. 卢伟冰疑似用上Redmi K30S:今年最后一款骁龙865旗舰
  4. oracle帮助文档_Spring Boot Config文档,使用IntelliJ IDEA的两种方法
  5. 中标麒麟系统u盘安装_中标麒麟u盘安装电脑系统方法
  6. 重要开源!CNN-RNN-CTC 实现手写汉字识别
  7. freebsd 6.2 安装配置笔记[转]
  8. Linux strace命令 一
  9. linux jsp mysql_Linux JSP连接MySQL数据库
  10. 2022年电子邮箱哪个好用?邮箱大全测评来了,请及时查看哦
  11. 裤子尺码对照表eur40_裤子的欧码32 34 36 38 40代表什么意思
  12. Java一些零散知识点--9.19更
  13. 四十岁以后,如何做夫妻?
  14. DOS基本命令和批处理
  15. R语言plotly可视化:使用plotly可视化模型预测真阳性率(True positive)TPR和假阳性率(False positive)FPR在不同阈值(threshold)下的曲线
  16. 开发板——在X210开发板上进行裸机开发的流程
  17. linux 内核usleep,linux 内核 usleep
  18. javascript 编码_我们的1,600小时JavaScript编码课程
  19. 差分隐私(背景介绍)
  20. 机构称谷歌新闻业务2018收入47亿美元 谷歌:计算方法有误

热门文章

  1. 读书笔记_Index
  2. 网站集成paypal快捷支付
  3. LINUX信息命令查看大全
  4. python入门(1)文档的处理
  5. 解決win7打开EXE文件总是出现安全警告
  6. [C#]C#补习——控制流语句相关
  7. 终于搞懂了Java 8 的内存结构,再也不纠结方法区和常量池了!!
  8. 推荐一个高仿微信的项目 有点屌!!!
  9. 蚂蚁金服:开源增强版 SpringBoot 的研发框架!
  10. Oracle用户可要顶住了:准备好大规模补丁工作!以修补多达 433 个的新安全漏洞...