ZR#1015

解法:

我们需要求得, $ g_i $ 表示长度为的最长不下降子序列个数。

设 $ f_{i,j} $ 表示统计第前$ i $ 个数字,得到最长不下降子序列末端为 $ j $ 。

显然这个状态可以从前面所有转移过来。

树状数组优化一下。

考虑到在 $ g_i $ 状态下,我们可以以任意顺序删去个 $ n-i $ 数,则长度为 $ i $ 的最长不下降子序列方案数为 $ g_i(n - i) !$

但是,不能保证它在成为最长不下降子序列时就停止删数。

不合法方案数为 $ g_{i+1}
(n- i - 1)! * (i + 1) $ (最后一次可以删个数中任意一个)。

所以统计答案的时候就是 $ ans = g_i * (n - i)! - g_{i+1}*(n-i-1)! * (i + 1) $

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> using namespace std; #define LL long long
#define N 2010
const int mod = 1e9 + 7; int n,pos[N];
LL a[N],t[N],sum[N][N];
LL f[N][N],g[N],fac[N],ans; inline int lowbit(int x) {
return x & -x;
}
void update(int id,int x,LL v) {
for(int i = x ; i <= n ; i += lowbit(i))
sum[id][i] = (sum[id][i] + v) % mod;
}
LL query(int id,int x) {
LL ans = 0;
for(int i = x ; i ; i -= lowbit(i))
ans = (ans + sum[id][i]) % mod;
return ans;
} int main() {
scanf("%d",&n);
for(int i = 1 ; i <= n ; i++)
scanf("%lld",&a[i]);
for(int i = 1 ; i <= n ; i++) t[i] = a[i];
sort(t + 1,t + n + 1);
int num = unique(t + 1,t + n + 1) - t - 1;
fac[1] = 1;
for(int i = 1 ; i <= n ; i++)
pos[i] = lower_bound(t + 1,t + num + 1,a[i]) - t;
for(int i = 2 ; i <= n ; i++)
fac[i] = 1LL * fac[i - 1] * i % mod;
update(0,1,1);
for(int i = 1 ; i <= n ; i++) {
for(int j = i ; j >= 1 ; j--) {
f[i][j] = (f[i][j] + query(j - 1,pos[i]) % mod) % mod;
update(j,pos[i],f[i][j] % mod);
}
}
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
g[i] = (g[i] + f[j][i]) % mod;
}
}
for(int i = 1 ; i <= n ; i++)
ans = ((ans % mod + (fac[n - i] % mod * g[i] % mod) % mod) % mod - fac[n - i - 1] % mod * g[i + 1] % mod * (i + 1) % mod + mod) % mod;
printf("%lld\n",ans);
//system("pause");
return 0;
}

ZR#1015的更多相关文章

  1. 1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...

  2. soj 1015 Jill's Tour Paths 解题报告

    题目描述: 1015. Jill's Tour Paths Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Every ...

  3. POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目

    http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...

  4. BZOJ 1015 题解

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  5. 【ZOJ】1015 Fishing Net

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1015 题意:给出一个n个点的无向图,询问是否为弦图,弦图定义为对于图中任意 ...

  6. [1015][JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2124  Solved: 909[Submit] ...

  7. 【BZOJ】1015: [JSOI2008]星球大战starwar(并查集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 看了题解的囧T_T,一开始以为是求割点,但是想到割点不能统计.... 这题用并查集,思想很巧妙 ...

  8. PAT乙级 1015. 德才论 (25)

    1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴&g ...

  9. fzu 1015 土地划分(判断线段相交+求出交点+找规律)

    链接:http://acm.fzu.edu.cn/problem.php?pid=1015  Problem 1015 土地划分 Accept: 714    Submit: 1675Time Lim ...

随机推荐

  1. Java 之 常用函数式接口

    JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在 java.util.function 包中被提供.下面是最简单的几个接口及使用示例. 一.Supplier 接口 java ...

  2. SIM800A 建立网络

    SIM800A是一款两频GSM/GPRS模块,为SMT封装.其性能稳定,外观小巧,性价比高 可以低功耗实现语音.SMS和数据信息的传输 数据传输 GPRS class 12:最大85.6 kbps(下 ...

  3. MySQL连接查询流程源码

    http://blog.itpub.net/29510932/viewspace-2129300/ 初始化: 点击(此处)折叠或打开 main |-mysqld |-my_init // 初始话线程变 ...

  4. es6 javascript的Class 类的继承

    原文链接:https://blog.csdn.net/qq_30100043/article/details/53542531 1 基本用法 Class 之间可以通过extends关键字实现继承, 这 ...

  5. gitlab及jenkins

    1.安装配置gitlab服务,在gitlab新建一个仓库,配置本地密钥,并通过ssh方式拉取gitlab仓库代码 https://packages.gitlab.com/gitlab/gitlab-c ...

  6. js中绑定事件处理函数,使用event以及传递额外数据

    IE8中使用attachEvent绑定事件处理函数时,不能直接向event 对象添加数据属性.可以用属性复制的方法,包装新的event对象. 1. 属性复制var ObjectExtend = fun ...

  7. 1209 BBS 登录

    目录 上周内容 今日内容 url.py views.py login home.html 逻辑流程 登录功能 上周内容 bbs项目 项目开发流程 需求分析 架构设计 分组开发 我们一般情况下都只是作用 ...

  8. 《少年先疯队》第八次团队作业:Alpha冲刺第一天

    前言   第一天冲刺会议   时间:2019.6.14   地点:9C406 1.1 今日完成任务情况以及遇到的问题.   1.1.1今日完成任务情况 姚玉婷:管理员登录功能的实现,用户登录功能的实现 ...

  9. mac pro下安装brew软件包管理工具

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载软件. 1.打开终端直接输入下面指令回车: ruby -e "$(curl -fsSL h ...

  10. vscode beautiful配置

    在工作目录下建立.jsbeautifyrc文件 官方文档 { "brace_style": "none,preserve-inline", "inde ...