bzoj 4361: isn 树状数组+动态规划
来源:互联网 发布:淘宝生意参谋 编辑:程序博客网 时间:2024/06/06 11:49
题意
给出一个长度为n的序列A(A1,A2…AN)。如果序列A不是非降的,你必须从中删去一个数,
这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。
n<=2000
分析
一眼看过去一点思路都没有,再多看几眼,还是没有思路。。。果然还是我太菜了
首先我们可以通过树状数组优化dp算出g[i]表示长度为i的不下降序列数量。
对于长度为i的不下降序列,单看其贡献的话就是
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=2005;const int MOD=1000000007;int n,a[N],w[N],c[N],f[N][N],jc[N],g[N];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;}void ins(int x,int y){ while (x<=n) c[x]+=y,c[x]-=c[x]>=MOD?MOD:0,x+=x&(-x);}int query(int x){ int ans=0; while (x) ans+=c[x],ans-=ans>=MOD?MOD:0,x-=x&(-x); return ans;}int main(){ n=read(); for (int i=1;i<=n;i++) a[i]=read(),w[i]=a[i]; sort(w+1,w+n+1); int w1=unique(w+1,w+n+1)-w-1; for (int i=1;i<=n;i++) a[i]=lower_bound(w+1,w+w1+1,a[i])-w; for (int i=1;i<=n;i++) f[i][1]=1; for (int j=2;j<=n;j++) { for (int i=1;i<=n;i++) c[i]=0; for (int i=j-1;i<=n;i++) f[i][j]=query(a[i]),ins(a[i],f[i][j-1]); } for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) g[i]+=f[j][i],g[i]-=g[i]>=MOD?MOD:0; jc[0]=1; for (int i=1;i<=n;i++) jc[i]=(LL)jc[i-1]*i%MOD; LL ans=0; for (int i=1;i<n;i++) (ans+=(LL)g[i]*jc[n-i]-(LL)g[i+1]*jc[n-i-1]%MOD*(i+1))%=MOD; ans+=g[n];ans-=ans>=MOD?MOD:0;ans+=ans<0?MOD:0; printf("%lld",ans); return 0;}
阅读全文
0 0
- bzoj 4361: isn 树状数组+动态规划
- BZOJ 4361 isn 动态规划+树状数组+容斥原理
- Bzoj4361:isn:树状数组+动态规划+容斥
- bzoj 4361: isn (容斥+DP+树状数组)
- BZOJ 1264 动态规划 + 树状数组
- BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组
- BZOJ 1537: [POI2005]Aut- The Bus|动态规划|树状数组
- bzoj 3594: [Scoi2014]方伯伯的玉米田 动态规划+树状数组
- BZOJ 3594 [Scoi2014]方伯伯的玉米田 动态规划+二维树状数组
- bzoj 4361: isn
- PKU3378 Crazy Thairs - 动态规划+树状数组
- To the Max-动态规划 树状数组
- bzoj4361 isn(树状数组优化DP)
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
- bzoj 3295: [Cqoi2011]动态逆序对 cdq分治+树状数组
- 【BZOJ】3295 [Cqoi2011]动态逆序对 树状数组+线段树
- SJTU 1123 折线统计 (动态规划&&树状数组)
- 【动态规划】【树状数组】[USACO2011 FEB]奶牛抗议
- display属性值
- javascript中for/in循环及使用技巧
- 输入输出的管理及vim命令的使用
- bind的IE678的兼容写法
- Ext中Grid所有分页汇总 ——后台操作数据(PageImpl返回数据)
- bzoj 4361: isn 树状数组+动态规划
- 1280 洛谷 尼克的任务
- 排序之插入排序
- MacOS网络配置
- super(LastUpdateOrderDict, self).__init__()是什么意思?
- MY LITTLE GAME | 第一次用Construct2制作html游戏
- 宏定义、内联函数、普通函数的区别
- 1.二维数组-定义 2.二维数组--重点 3.二维数组-遍历
- XMLHttpRequest对象的基本属性: