BZOJ4361 : isn】的更多相关文章

[BZOJ4361]isn Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. Input 第一行一个整数n. 接下来一行n个整数,描述A. Output 一行一个整数,描述答案. Sample Input 4 1 7 5 3 Sample Output 18 HINT 1<=N<=2000 题解:想到动归+树状数组+容斥,但是容斥系数想复杂了~ 我们希…
[BZOJ4361]isn(动态规划,容斥) 题面 BZOJ 题解 首先我们如果确定了一个不降序列,假设它的长度为\(i\), 那么可行的方案数为\(i*(n-i)!\),但是这样有一些非法的情况,即删掉最后一个数之前已经是有序的了. 那么设\(g[i]\)表示长度为\(i\)的不降序列的总数 因为所有长度为\(i\)的不降序列一定包含在长度为\(i+1\)的不降序列之中 如果先构成了一个长度为\(i+1\)的不降序列,再删掉了一位,那么这样是不合法的. 所以长度为\(i\)的不降序列的贡献为:…
BZOJ4361 isn Description 给出一个长度为n的序列A(A1,A2-AN).如果序列A不是非降的,你必须从中删去一个数,这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. Input 第一行一个整数n. 接下来一行n个整数,描述A. Output 一行一个整数,描述答案. Sample Input 4 1 7 5 3 Sample Output 18 HINT 1<=N<=2000 我们可以设dp[i][j]" role="pres…
首先dp出长度为i的不下降子序列个数,显然这可以树状数组做到O(n2logn). 考虑最后剩下的序列是什么,如果不管是否合法只是将序列删至只剩i个数,那么方案数显然是f[i]*(n-i)!.如果不合法,说明这个序列是由一个长度为i+1的非降序列删除一个数得来的,所以将其减去f[i+1]*(i+1)*(n-i-1).这里的斥显然不会有重复. #include<iostream> #include<cstdio> #include<cmath> #include<cs…
题目 [BZOJ4361]isn 做法 \(dp_{i,j}\)表示以\(i\)结尾\(j\)长度,树状数组\(tree_{i,j}\)表长度为\(i\),以\(<=j\)结尾的个数,显然\(dp_{i,j}=\sum\limits_{k=1}^{pos[i]}tree[j-1][k]\) 从而\(O(n^2logn)\)得到每个长度不下降子序列个数 \(ans=\sum\limits_{i=1}^n(g[i]\times (n-i)!-g[i+1]\times (n-i-1)!\times (…
设$f[i]$表示长度为$i$的不下降子序列的个数. 考虑容斥,对于长度为$i$的子序列,如果操作不合法,那么之前一定是一个长度为$i+1$的子序列,所以答案$=\sum_{i=1}^n(f[i]\times (n-i)!-f[i+1]\times (n-i-1)!\times (i+1))$. 时间复杂度$O(n^2\log n)$. #include<cstdio> #include<algorithm> const int N=2010,P=1000000007; int n…
传送门 不考虑成为非降序列后停止的限制,那么答案显然是\(\sum\limits_{i=1}^N cnt_i \times (N-i)!\),其中\(cnt_i\)表示长度为\(i\)的非降序列数量 计算\(cnt_i\)使用DP:设\(f_{i,j}\)表示前\(i\)个数中长度为\(j\).以第\(i\)个数结尾的非降序列数量,转移可以树状数组优化 然后考虑成为非降序列之后停止的限制.容斥一下,对于长度为\(i\)的非降序列,其中的非法情况就是从长度为\(i+1\)的非降序列删掉一个数转移过…
4361: isn Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 938  Solved: 485[Submit][Status][Discuss] Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. Input 第一行一个整数n. 接下来一行n个整数,描述A. Output 一行一个整数,描述答案. Sa…
我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn)$求出来 然后我们让g[i]是长度为i的不降子序列的个数,答案就是$\sum{g[i]*(N-i)!-g[i+1]*(N-i-1)!*(i+1)}$ 解释一下,因为他求的是不同的操作个数,所以我们给g[i]乘个(N-i)!,表示删的顺序:但其实我们有可能删的时候已经删出来了一个不降子序列.类似地,删多的的不同…
题面 darkbzoj 题解 \(g[i]\)表示长度为\(i\)的非降序列的个数 那么, \[ ans = \sum_{i=1}^{n}g[i]*(n-i)!-g[i+1]*(n-i-1)!*(i+1) \] 怎么求\(g[i]\)呢 设\(f[i][j]\)为长度为\(i\)的非降序列,以最后一个数是\(j\)的数量 \(f[i][j] = \sum f[i-1][k](k<=j)\) 这样是\(O(n^3)\) 因为带修改,所以树状数组优化转移 复杂度:\(O(n^2logn)\) Cod…