D. Yet Another Problem On a Subsequence 解析(DP)
Codeforce 1000 D. Yet Another Problem On a Subsequence 解析(DP)
今天我們來看看CF1000D
題目連結
題目
略,請直接看原題
前言
這題提供了我一種實用的算\(C_m^n\)的方法

想法
考慮\(dp[i]\)為考慮到\(i\)位置為止的所以\(subsequence\)數量\(+1\)(一個都不選),解答就是\(dp[n]-1\)。
每次新考慮一個\(dp[i]\)時,\(dp[i]\)由不包含\(a[i]\)(\(a\)是原數列)的\(subsequence\)數量加上包含\(a[i]\)的\(subsequence\)數量。而考慮包含\(a[i]\)的數量時,我們只需要往前找最後一個\(subarray\)的起點(\(a[j]>0\)),接著使用\(C_m^n\)找出最後的\(subarray\)有幾種可能就好。
重點在於要如何計算\(C_m^n\),數字太容易爆掉了。這時候我們要利用\(C_m^n=C_m^{n-1}+C_{m-1}^{n-1}\),這樣就不會爆掉了,並且要特別令\(C_0^0=1\),因為我們之後計算\(dp\)時會用到。
轉移式\(:dp[i]=dp[i-1]+\sum\limits_{j=1}^{i-1}dp[j-1]\times C_{a[j]-1}^{i-j-1}\)
注意:我們令\(dp[0]=1\)以方便計算。而數列標號是從\(1\)開始。
程式碼:
inline int pmod(int x, int d){int m = x%d;return m+((m>>31)&d);}
const int _n=1010;
int t,n,a[_n],dp[_n],C[_n][_n];
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n;rep(i,1,n+1)cin>>a[i];
rep(i,1,n+1){
C[i][0]=C[i][i]=1;
rep(j,1,i)C[i][j]=(1ll*C[i-1][j]+1ll*C[i-1][j-1])%mod;
}C[0][0]=1;
dp[0]=dp[1]=1;
rep(i,2,n+1){
dp[i]=dp[i-1];
per(j,1,i)
if(a[j]>0 and a[j]<=i-j)dp[i]=(dp[i]+(1ll*dp[j-1]*C[i-j-1][a[j]-1]))%mod;
}
cout<<pmod(dp[n]-1,mod)<<'\n';
return 0;
}
標頭、模板請點Submission看
Submission
D. Yet Another Problem On a Subsequence 解析(DP)的更多相关文章
- CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数)
The sequence of integers a1,a2,…,aka1,a2,…,ak is called a good array if a1=k−1a1=k−1 and a1>0a1&g ...
- D - Yet Another Problem On a Subsequence CodeForces - 1000D (DP,组合数学)
D - Yet Another Problem On a Subsequence CodeForces - 1000D The sequence of integers a1,a2,-,aka1,a2 ...
- hdu 1159 Common Subsequence (dp乞讨LCS)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1159 Common Subsequence【dp+最长公共子序列】
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1159 Common Subsequence (dp)
题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...
- C1. Pokémon Army (easy version) 解析(DP)
Codeforce 1420 C1. Pokémon Army (easy version) 解析(DP) 今天我們來看看CF1420C1 題目連結 題目 對於一個數列\(a\),選若干個數字,求al ...
随机推荐
- 垃圾回收器(GC)
分类 针对hotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集:不是完整收集整个Java堆的垃圾收集 ...
- 安装MySQL和出现的问题解决
在Windows下安装mysql,注意自己的Windows是32位还是64位. MySQL官网下载地址:https://dev.mysql.com/downloads/mysql/ 下载完之后,解压放 ...
- Spring Boot 项目打成 war 包部署
Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署.其实 Spring Boot 也是 ...
- sping ioc 源码分析(一)-- register(componentClasses) 方法
一.测试环境的搭建: public class Apple { } @Component public class MyComponet { } public class MyCondition im ...
- 关于Xilinx PCIE DMA的问答
关于Xilinx PCIE DMA的问答 很久没上博客园了,但由于之前在博客园写了几篇关于PCIE DMA的文章,很多同学给我发消息询问相关知识点,之前有空的时候都是语音一小时跟人细讲,最近由于工作繁 ...
- sed: -e expression #1, char 23: unknown option to `s'
语言:bash why? / 作为sed的分隔符,和需要操作的内容有冲突 way? 替换 / 分隔符为 # 或者其他分隔符
- Python练习题 006:输出九九乘法表
[Python练习题 006] 输出九九乘法表 --------------------------------------------------- 照理这题不难,逻辑关系弄对了就好办,但数学渣的我 ...
- tomcat:tomcat安装(在一台电脑上安装两个tomcat)
1.安装前的说明 (1)在安装第二个tomcat之前,我们要知道安装一台tomcat的时候需要在电脑上添加两个系统变量 然后在path中配置: (2)这个时候我们就要思考了,当安装第二台服务器的时候首 ...
- Dubbo的负载均衡策略&容错策略
dubbo的负载均衡策略 RandomLoadBalance 随机调用负载均衡 默认方式该类实现了抽象的AbstractLoadBalance接口,重写了doSelect方法,看方法的细节就是首先遍历 ...
- 用-pthread替代-lpthread
-pthread 在多数系统中,-pthread会被展开为"-D_REENTRANT -lpthread".作为编译参数可以通知系统函数开启多线程安全特性,比如将errno定义线程 ...