FZU 2129 子序列个数(DP)题解
题意:求子序列种数
思路: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)题解相关推荐
- FZU 2129 子序列个数 (递推dp)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...
- 1202 子序列个数
1202 子序列个数 子序列的定义:对于一个序列a=a[1],a[2],......a[n].则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1< ...
- 字符串的回文子序列个数_计算给定字符串中回文子序列的数量
字符串的回文子序列个数 Problem statement: 问题陈述: Given a string you have to count the total number of palindromi ...
- 求最长递增子序列个数——C++
声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一.下面是原题描述 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] ...
- 2015编程之美资格赛 回文子序列个数
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a& ...
- [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解
全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...
- 牛客题霸 [ 最小的K个数] C++题解/答案
牛客题霸 [ 最小的K个数] C++题解/答案 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题解: 如果有n&l ...
- 牛客题霸 [二进制中1的个数] C++题解/答案
牛客题霸 [二进制中1的个数] C++题解/答案 题目描述 输入一个整数,输出该数32位二进制表示中1的个数.其中负数用补码表示. 题解: 判断1的个数 x&(-x)=2^k 有点类似于树状数 ...
- 力扣 统计各位数字都不同的数字个数 C++ 题解
力扣 统计各位数字都不同的数字个数 C++ 题解 文章目录 力扣 统计各位数字都不同的数字个数 C++ 题解 一.完整题目 二.具体思路 三.编写代码 四.测评结果 五.总结评价 一.完整题目 给你一 ...
- leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)
题目 https://leetcode.com/problems/delete-operation-for-two-strings/ 题解 本题实质上是个最长公共子序列问题,又是经典的 递归-> ...
最新文章
- Vue axios 中提交表单数据(含上传文件)
- winform c#绑定combobox下拉框 年度代码。
- 卢伟冰疑似用上Redmi K30S:今年最后一款骁龙865旗舰
- oracle帮助文档_Spring Boot Config文档,使用IntelliJ IDEA的两种方法
- 中标麒麟系统u盘安装_中标麒麟u盘安装电脑系统方法
- 重要开源!CNN-RNN-CTC 实现手写汉字识别
- freebsd 6.2 安装配置笔记[转]
- Linux strace命令 一
- linux jsp mysql_Linux JSP连接MySQL数据库
- 2022年电子邮箱哪个好用?邮箱大全测评来了,请及时查看哦
- 裤子尺码对照表eur40_裤子的欧码32 34 36 38 40代表什么意思
- Java一些零散知识点--9.19更
- 四十岁以后,如何做夫妻?
- DOS基本命令和批处理
- R语言plotly可视化:使用plotly可视化模型预测真阳性率(True positive)TPR和假阳性率(False positive)FPR在不同阈值(threshold)下的曲线
- 开发板——在X210开发板上进行裸机开发的流程
- linux 内核usleep,linux 内核 usleep
- javascript 编码_我们的1,600小时JavaScript编码课程
- 差分隐私(背景介绍)
- 机构称谷歌新闻业务2018收入47亿美元 谷歌:计算方法有误