强军如歌(strong)
强军如歌(strong)
题目描述
给定一个NN个数的序列AA,如果序列AA不是非降序的,你需要在其中选择一个数删掉,不断重复这个操作直到序列AA非降。求有多少种不同的删数方案。注意:删掉的数的集合相同,但是删数的顺序不同,视作不同的删数方案。
输入
第一行一个数NN。
接下来一行NN个正整数,用空格隔开,第ii个数表示Ai。
输出
一行一个整数表示答案对1000000007取模的结果。
solution
首先我们考虑不管删数顺序,枚举出剩下的不降序列。
假设长度为l
那么这时候的删数方案为(n-l)!
我们考虑一种不合法的删数方案:再删除第l个数前,序列一定要是不降的。
也就是每一个长度为l+1的不降序列,都对应着l+1个不合法方案。
用树状数组求出长度为l的不降子序列个数
这样就可以快速统计了
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 2005
#define mod 1000000007
#define ll long long
using namespace std;
int n,Max,a[maxn];
ll f[maxn][maxn],tree[maxn],ans[maxn],h[maxn];
int ask(int i){
ll sum=0;
for(;i;i-=i&-i)sum=(sum+tree[i])%mod;
return sum;
}
void jia(int i,ll v){
for(;i<=Max;i+=i&-i)tree[i]=(tree[i]+v)%mod;
}
int main()
{
cin>>n;
h[0]=1;for(int i=1;i<=n;i++)h[i]=(h[i-1]*i)%mod;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
Max=max(a[i],Max);
}
for(int i=1;i<=n;i++)f[i][1]=1;ans[1]=h[n];
for(int i=2;i<=n;i++){
for(int j=1;j<=Max;j++)tree[j]=0;
for(int j=1;j<=n;j++){
f[j][i]=ask(a[j]);
jia(a[j],f[j][i-1]);
}
ll sum=0;
for(int j=1;j<=n;j++)sum=(sum+f[j][i])%mod;
ans[i]=(sum*h[n-i])%mod;
}
ll A=0;
for(int i=1;i<=n;i++){
A=A+ans[i]-(ans[i+1]*(i+1))%mod;A%=mod;
}
A=(A%mod+mod)%mod;
cout<<A<<endl;
return 0;
}
强军如歌(strong)的更多相关文章
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- h1、h2、h3标签及strong标签对页面seo的影响
今天和大家来聊下h1,h2,h3,strong几个标签,在网页中的使用对页面seo的影响,也阐述了个人的一些想法. 首先简要讲下H标签及strong标签的含义:<h1>.<h2> ...
- @property中的copy.strong.weak总结
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" ...
- [LeetCode] Strong Password Checker 密码强度检查器
A password is considered strong if below conditions are all met: It has at least 6 characters and at ...
- NSString属性什么时候用copy,什么时候用strong?
我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢 ...
- iOS 浅谈:深.浅拷贝与copy.strong
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyStri ...
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...
- 【iOS atomic、nonatomic、assign、copy、retain、weak、strong】的定义和区别详解
一.atomic与nonatomic 1.相同点 都是为对象添加get和set方法 2.不同点 atomic为get方法加了一把安全锁(及原子锁),使得方法get线程安全,执行效率慢 nonatomi ...
- strong,weak, retain, assign的区别
strong,weak, retain, assign的区别 strong与weak是由ARC新引入的对象变量属性 xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain ...
随机推荐
- Spring框架进阶3
Spring框架进阶3 测试spring_jdbc和spring对事务的管理 先配置相应的pom <?xml version="1.0" encoding="UTF ...
- mysql 自增主键为什么不是连续的?
由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑 MyISAM 引擎的自增值保存在数据文件中 nnoDB 引擎的自增值,其实是保存在了内存里,并且到了 MySQL 8.0 ...
- MySQL的where条件优化
where 条件优化 适合select delete update 1.避免无用的括号 ((a AND b) AND c OR (((a AND b) AND (c AND d)))) -> ...
- Java8 新API读取文件内容
import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...
- salt demo 环境
demo 环境 安装 virtualBox和vagrant 安装工具包:virtualBox, vagrant 下载 https://github.com/UtahDave/salt-vagrant- ...
- adb 显示手机分辨率
adb shell dumpsys window | grep "ShownFrame" | head -n 1 adb shell dwm size 当然,作为一个Android ...
- android studio 首字母提示 设置 大小写敏感
在使用Android studo 编写程序时, 刚开始,关键字提示 首字母 设置了 大小写敏感,小写字母只能提示小写字母开头的,大写字母只能提示大写字母开始的,比较麻烦,在网上搜了下,解决办法如下: ...
- stm32--free modbus 1.5.0移植(作为从机)
添加文件 获取原始free modbus library(官网) 将...\freemodbus-v1.5.0\demo\BARE中的所有文件复制到...\freemodbus-v1.5.0\modb ...
- zedboard烧写SD卡启动linux镜像
1. 先把SD卡格式化,然后把镜像文件拷贝到SD卡,下面应该是没有文件系统的 2. 插上SD卡,Zedboard设置启动模式,有5个跳线帽,配置如下,上电启动 3. 看下串口的输出
- Java代码中获取配置文件(config.properties)中内容的两种方法
方法千千万,本人暂时只总结了两种方法. (1)config.properties中的内容如图 在applicationContext.xml中配置 <!-- 引入配置文件 --> < ...