【BZOJ4361】isn 动态规划+树状数组+容斥
【BZOJ4361】isn
Description
Input
Output
一行一个整数,描述答案。
Sample Input
1 7 5 3
Sample Output
HINT
题解:想到动归+树状数组+容斥,但是容斥系数想复杂了~
我们希望先求出所有长度为i的非降序列个数,可以用DP解决。设f[i][j]表示最大值为i,长度为j的非降序列个数,用树状数组优化转移即可。
然后用g[i]表示$\sum f[..][j]$。因为其它数删除的顺序可以随便选,所以g[i]*=(n-i)!。但是有可能删到一半就已经得到了一个非降序列,怎么除去不合法状态呢?容斥呗!
一开始想了半天容斥系数,但其实g[i]-=g[i+1]*(i+1)即可。因为删到一般就得到非降序列情况刚好是g[i+1]。
时间复杂度$O(n^2\log n)$
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int P=1000000007;
int n,m;
ll ans;
int val[2010],v[2010],p[2010];
int s[2010][2010];
ll f[2010],c[2010][2010],jc[2010],jcc[2010],ine[2010];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
bool cmp(const int &a,const int &b)
{
return val[a]<val[b];
}
inline void updata(int x,int y,int z)
{
if(!z) return ;
f[y]+=z;
for(int i=x;i<=m;i+=i&-i)
{
s[y][i]+=z;
if(s[y][i]>=P) s[y][i]-=P;
}
}
inline int query(int x,int y)
{
int i,ret=0;
for(i=x;i;i-=i&-i)
{
ret+=s[y][i];
if(ret>=P) ret-=P;
}
return ret;
}
int main()
{
n=rd();
int i,j;
jc[0]=jc[1]=jcc[0]=jcc[1]=ine[0]=ine[1]=1;
for(i=2;i<=n;i++) jc[i]=jc[i-1]*i%P,ine[i]=P-(P/i)*ine[P%i]%P,jcc[i]=jcc[i-1]*ine[i]%P;
for(i=0;i<=n;i++)
{
c[i][0]=1;
for(j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%P;
}
for(i=1;i<=n;i++) val[i]=rd(),p[i]=i;
sort(p+1,p+n+1,cmp);
for(i=1;i<=n;i++)
{
if(i==1||val[p[i]]>val[p[i-1]]) m++;
v[p[i]]=m;
}
for(i=1;i<=n;i++)
{
for(j=i;j>=2;j--) updata(v[i],j,query(v[i],j-1));
updata(v[i],1,1);
}
for(i=1;i<=n;i++) f[i]=f[i]%P*jc[n-i]%P;
for(i=1;i<=n;i++) f[i]=(f[i]-f[i+1]*(i+1)%P+P)%P,ans=(ans+f[i])%P;
printf("%lld",ans);
return 0;
}//4 1 2 3 4
【BZOJ4361】isn 动态规划+树状数组+容斥的更多相关文章
- bzoj4361 isn (dp+树状数组+容斥)
我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn) ...
- BZOJ.4361.isn(DP 树状数组 容斥)
题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...
- 【BZOJ 4361】 4361: isn (DP+树状数组+容斥)
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 218 Solved: 126 Description 给出一个长度为n的序列A( ...
- 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...
- bzoj4361 isn(树状数组优化dp+容斥)
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 938 Solved: 485[Submit][Status][Discuss] ...
- BZOJ4361 isn(动态规划+树状数组+容斥原理)
首先dp出长度为i的不下降子序列个数,显然这可以树状数组做到O(n2logn). 考虑最后剩下的序列是什么,如果不管是否合法只是将序列删至只剩i个数,那么方案数显然是f[i]*(n-i)!.如果不合法 ...
- BZOJ4361 isn 【树状数组优化DP】*
BZOJ4361 isn Description 给出一个长度为n的序列A(A1,A2-AN).如果序列A不是非降的,你必须从中删去一个数,这一操作,直到A非降为止.求有多少种不同的操作方案,答案模1 ...
- 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)
赛后当天学长就说了树状数组,结果在一个星期后赖床时才有了一点点思路…… 因为无法提交,不确定是否正确..嗯..有错希望指出,谢谢... 嗯..已经A了..提交地址http://acm.uestc.ed ...
- BZOJ4990 [Usaco2017 Feb]Why Did the Cow Cross the Road II 动态规划 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4990 题意概括 有上下两行长度为 n 的数字序列 A 和序列 B,都是 1 到 n 的排列,若 a ...
随机推荐
- 安卓开发笔记——Gallery组件+ImageSwitcher组件
什么是Gallery? Gallery是一个水平的列表选择框,它允许用户通过拖动来查看上一个.下一个列表选项. 下图是今天要实现的最终效果: 利用Gallery组件实现的一个横向显示图像列表,可以通过 ...
- VC获得本机网络连接状态
/本机网络连接类型(成功) #define NET_TYPE_RAS_DIAL_UP_CONNECT_NET 0x01 //上网类型:采用RAS拨号连接上网 0x01 ...
- js压缩上传图片base64长度
im发送图片,现将图片压缩再上传 1) 调用 FileReader 的 reader.readAsDataURL(img); 方法, 在其onload事件中, 将用户选择的图片读入 Image对象. ...
- phpcms列表页调用 点击量
很多朋友经常问Phpcms v9的首页.列表页.内容页点击量如何调用.现在就给大家分享phpcms V9如何分别在首页.列表页.内容页调用点击量代码: 1. Phpcms v9首页调用点击量{pc:c ...
- symfony window下的安装 安装时候出现的问题以及解决方案
1. cmd进入DOS , cd 到 php.exe 的目录下 2. php -r "readfile('http://symfony.com/installer');&q ...
- MTK 精简ROM
PhaseBeam.apk--------------------------------------动态壁纸光之韵律(可删) Phone.apk--------------------------- ...
- Spring父容器与子容器
在使用spring+springMVC的web工程中,我们一般会在web.xml中做如下配置: <context-param> <param-name>contextConfi ...
- Ulua_toLua_基本案例(六)_LuaCoroutine2
Ulua_toLua_基本案例(六)_LuaCoroutine2 using UnityEngine; using System.Collections; using LuaInterface; pu ...
- SpringMVC由浅入深day01_10@RequestMapping_11controller方法的返回值
10 @RequestMapping 10.1 Url路径映射 @RequestMapping(value="/item")或@RequestMapping("/item ...
- Docker background
什么是 Docker? Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨论 ...