bzoj4361 isn
来源:互联网 发布:新手编程书 编辑:程序博客网 时间:2024/06/07 16:11
4361: isn
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 44 Solved: 28
[Submit][Status][Discuss]
Description
给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数,
这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。
Input
第一行一个整数n。
接下来一行n个整数,描述A。
Output
一行一个整数,描述答案。
Sample Input
4
1 7 5 3
1 7 5 3
Sample Output
18
HINT
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<iostream>#include<cstdio>#include<cstring>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#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 1000000007using 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 0
- bzoj4361 isn
- [bzoj4361]Isn
- bzoj4361 isn(树状数组优化DP)
- Bzoj4361:isn:树状数组+动态规划+容斥
- [BZOJ4361]isn(dp+树状数组+容斥原理)
- 4361: isn
- time isn't coming
- TCP初始化序列号ISN
- successView isn't set
- TCP初始化序列号ISN
- bzoj 4361: isn
- java: isn't it ironic?
- When an Autorelease Isn't
- What UML Is and Isn't
- The Most Important Code Isn't Code
- Why Isn't Oracle Using My Index?!
- warning: function declaration isn't a prototype
- The Most Important Code Isn't Code
- unicode编码与非unicode 编码
- 项目记录28--unity-tolua框架 lua使用协程
- Gof23
- .Net 互联网技术(一)分布式ID生成方法生成演变
- C++上机实验1-2
- bzoj4361 isn
- 测试机器大小端的方法
- [LeetCode]326. Power of Three
- 第一次作业3-1
- 浅谈java自动装箱,拆箱
- 每周学一点Egret(11) Egret Wing 3.0.1插件
- lua笔记
- JavaScript中&&和||的运算
- selenium操作选择列表