bzoj4361 isn
程序员文章站
2022-04-17 08:53:46
Description
给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数,
这一操作,直到A非降为止。求有多少种不同的操作方案,答案...
Description
给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数,
这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。
Input
第一行一个整数n。
接下来一行n个整数,描述A。
Output
一行一个整数,描述答案。
Sample Input
41 7 5 3
Sample Output
18HINT
1<=N<=2000
Source
用f[i][j]表示以a[i]结尾,长度为j的非降子序列个数,这可以用树状数组优化的DP解决,时间复杂度O(n^2logn)。
再用g[i]表示长度为i的非降子序列个数,很显然g[i]=∑f[k][i],时间复杂度O(n^2)。
然后根据容斥原理,ans=∑((n-i)!*g[i]-(n-i-1)!*g[i+1]*(i+1))。
#include #include #include #include #include #include #include #define F(i,j,n) for(int i=j;i<=n;i++) #define D(i,j,n) for(int i=j;i>=n;i--) #define ll long long #define maxn 2005 #define mod 1000000007 using namespace std; int n,cnt; int a[maxn],b[maxn],bb[maxn]; ll f[maxn][maxn],g[maxn],fac[maxn],s[maxn][maxn]; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline void add(int id,int pos,ll x) { for(;pos<=n;pos+=(pos&(-pos))) (s[id][pos]+=x)%=mod; } inline ll query(int id,int pos) { ll ans=0; for(;pos;pos-=(pos&(-pos))) (ans+=s[id][pos])%=mod; return ans; } int main() { n=read(); F(i,1,n) a[i]=b[i]=read(); sort(b+1,b+n+1); F(i,1,n) if (i==1||b[i]!=b[i-1]) bb[++cnt]=b[i]; F(i,1,n) a[i]=lower_bound(bb+1,bb+cnt+1,a[i])-bb; fac[0]=1; F(i,1,n) fac[i]=fac[i-1]*i%mod; add(0,1,1); F(i,1,n) D(j,i,1) { f[i][j]=query(j-1,a[i])%mod; add(j,a[i],f[i][j]); } F(i,1,n) F(j,i,n) (g[i]+=f[j][i])%=mod; ll ans=0; F(i,1,n) ans=(((ans+g[i]*fac[n-i])%mod-g[i+1]*fac[n-i-1]%mod*(i+1)%mod)%mod+mod)%mod; printf("%d\n",ans); }
上一篇: 菜鸟之旅——学习线程(1)
下一篇: 怎么完全卸载oracle 11g?
推荐阅读
-
Support for the experimental syntax 'decorators-legacy' isn't currently enabled,装饰器语法报错
-
bzoj4361 isn
-
ANGULARJS5趟坑1:CAN’T BIND TO ‘NGMODEL’ SINCE IT ISN’T A KNOWN PROPERTY OF ‘INPUT’
-
javascript - post上传完 返回format: request Content-Type isn't multipart/form-data
-
Flutter打包apk报错:Your app isn't using AndroidX.
-
javascript - post上传完 返回format: request Content-Type isn't multipart/form-data
-
bzoj4361 isn
-
ANGULARJS5趟坑1:CAN’T BIND TO ‘NGMODEL’ SINCE IT ISN’T A KNOWN PROPERTY OF ‘INPUT’