4361: isn

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 218  Solved: 126

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

Source

【分析】

  考虑倒着想。

  你倒数第一步做之前还不是非降,做完之后就非降了,说明如果有一个上升序列,你加倒数第一个点时候不是上升序列了,前面的操作就可以任意了。

  本来想保证这个的,但是发现放入DP里还有一个关于长度的阶乘,根本不行。

  然后考虑容斥。

  现在的问题是:倒数第一个点x,放入序列里面还是非降的,这个时候不应该计算。

  即操作结束在更之前。把这些不合法的减掉就好了。

  g[i]表示长度为i的上升序列个数

  那么贡献就是$g[i]*(n-i)!-g[i+1]*(i+1)*(n-i-1)!$

 

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 2010
#define Mod 1000000007
// #define LL long long int f[Maxn][Maxn],g[Maxn],fac[Maxn],c[Maxn],a[Maxn]; struct node {int x,id;}t[Maxn];
bool cmp(node x,node y) {return x.x<y.x;} int mx;
void add(int x,int y)
{
for(int i=x;i<=mx;i+=i&(-i))
{
c[i]=(c[i]+y)%Mod;
}
} int get_sum(int x)
{
int ans=;
for(int i=x;i>=;i-=i&(-i))
ans=(ans+c[i])%Mod;
return ans;
} int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x;scanf("%d",&x);
t[i].x=x;t[i].id=i;
}
sort(t+,t++n,cmp);
mx=;a[t[].id]=;
for(int i=;i<=n;i++)
{
if(t[i].x!=t[i-].x) mx++;
a[t[i].id]=mx;
}
for(int i=;i<=n;i++) f[][i]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++) c[j]=;
for(int j=;j<=n;j++)
{
f[i][j]=get_sum(a[j]);
add(a[j],f[i-][j]);
}
}
for(int i=;i<=n;i++) for(int j=;j<=n;j++) g[i]=(g[i]+f[i][j])%Mod;
fac[]=;for(int i=;i<=n;i++) fac[i]=1LL*fac[i-]*i%Mod;
int ans=;
ans=(ans+g[n]);
for(int i=;i<n;i++)
{
ans=(ans+1LL*g[i]*fac[n-i]%Mod-1LL*fac[n-i-]*g[i+]%Mod*(i+)%Mod)%Mod;
}
ans=(ans+Mod)%Mod;
printf("%d\n",ans);
return ;
}

2017-04-20 17:01:57

【BZOJ 4361】 4361: isn (DP+树状数组+容斥)的更多相关文章

  1. BZOJ.4361.isn(DP 树状数组 容斥)

    题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...

  2. 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) ...

  3. 【BZOJ4361】isn 动态规划+树状数组+容斥

    [BZOJ4361]isn Description 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案, ...

  4. bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 793  Solved: 503[Submit][S ...

  5. 树形DP+树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  6. 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...

  7. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  8. BZOJ 4361 isn | DP 树状数组

    链接 BZOJ 4361 题面 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. ...

  9. BZOJ 4361 isn 容斥+dp+树状数组

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4361 题意概述: 给出一个长度为N的序列A(A1,A2...AN).如果序列A不是非降的 ...

随机推荐

  1. .net core 集成 autofac.

    1. Install Install-Package Autofac Install-Package Autofac.Extensions.DependencyInjection 2.Startup ...

  2. 2017ACM暑期多校联合训练 - Team 7 1008 HDU 6127 Hard challenge (极角排序)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...

  3. Linux下文本浏览器lynx

    一般登录到Linux上的时候都是使用Shell登录上去的,但是如果这个时候我们有浏览网页的需求怎么办,比如我刚刚部署上去一个网站,但是我并不知道我有没有部署成功,而且只能在这一台Linux上能够访问到 ...

  4. python 第二章 对象与类型

    可变对象和不可变对象 1,可变对象,list(列表),dict(字典),集合(set),字节数组. 2,不可变对象,数值类型,字符串,字节串,元组(具体形式 ()). 注意条件:可变和不可变指的是该对 ...

  5. 蓝色的cms企业记账管理后台模板源码——后台

    链接:http://pan.baidu.com/s/1bpxKGBP 密码:suda

  6. 012 public等关键字可见性

    public: 具有最大的访问权限,可以访问任何一个在classpath下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. protected: 主要的作用就是用来保护子 ...

  7. [转载]锁无关的(Lock-Free)数据结构

    锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续 Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也 ...

  8. PCA算法和SVD

    如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值.这里可以将特征值为负,特征向量旋转180度,也可看成方向不变,伸缩 ...

  9. WireShark出现The NPF driver isn't running的问题

    昨天开始尝试装上了wireshark网络监视软件,可是今天打开去总是出现“The NPF driver isn't running.You may have trouble capturing or ...

  10. MacBook Pro查找已安装的python目录

    MacBook Pro上下载的python安装后,发现查找目录无从下手,如下则是给出解决方案. 1.可下载pip进行安装,安装完成后,打开终端,输入:pip 并回车,则看到pip安装成功 2.再次输入 ...