JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. 【NOIP2017模拟8.7A组】好的排列
(File IO): input:permutation.in output:permutation.out
Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits
Description
对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai。对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好的排列。
现在有q个询问,每个询问给定n,k,问有多少排列是好的。答案对10^9+7取模。
Input
输入文件名为permutation.in。
首先输入q。
接下来输入q个询问n,k 。
Output
输出文件名为permutation.out。
输出q行,每行一个整数代表答案。
Sample Input
8
4 3
6 4
10 7
20 14
50 40
100 72
1000 900
3000 2000
Sample Output
8
448
1433856
868137807
908422882
609421284
150877522
216180189
Data Constraint
对于20%的数据,n<=10,q=1
对于40%的数据,n<=20,q=1
对于60%的数据,n<=100
对于100%的数据,n,k<=3000,q<=10000
题解
dp题
题目中 好处 定义是 当且仅当Ai−1>Ai 或者Ai+1>Ai
这个不好处理
我们可以转化成 坏处 为 当且仅当Ai−1<Ai>Ai+1
用f[i][j]表示前i个恰有j个坏处的排列数
如果第i个作为坏处,那么它可以放在任何原本不是坏处的两边
f[i−1][j−1]∗(i−j)∗2 −> f[i][j]
如果第i个不作为坏处,那么它可以放在原本的坏处的两边
f[i−1][j]∗(i−(i−1−j)∗2) −> f[i][j]
答案就是
代码
#include<cstdio>
#include<algorithm>
#define mo 1000000007
#define Q 10010
#define N 3010
long n[Q],m[Q];
long long f[N][N];
int main()
{ long tot,i,j,ans,maxn=0,maxm=0;
freopen("permutation.in","r",stdin);
freopen("permutation.out","w",stdout);
scanf("%ld",&tot);
for(i=1;i<=tot;i++){
scanf("%ld%ld",&n[i],&m[i]);
maxn=std::max(maxn,n[i]);
maxm=std::max(maxm,m[i]);
}
f[1][0]=1;
for(i=2;i<=maxn;i++)
for(j=1;j<i;j++){
f[i][j]=(f[i-1][j-1]*(i-j)*2%mo+f[i-1][j]*(i-(i-1-j)*2)%mo)%mo;
}
for(i=1;i<=tot;i++){
ans=0;
for(j=n[i];j>=m[i];j--)
ans=(ans+f[n[i]][j])%mo;
printf("%ld\n",ans);
}
return 0;
}
JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列的更多相关文章
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)
3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...
- JZOJ.5235【NOIP2017模拟8.7】好的排列
Description 对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai.对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好 ...
- JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...
- JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语
4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms Mem ...
- JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C
3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...
随机推荐
- 基于soap 的 python web services 服务开发指南
文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...
- Spring Boot中@Async的作用
在Spring中,@Async这个注解用于标记的异步的方法.方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑. 此注解的使用说明: 1.此注解可以用在方法上, ...
- webapck imports-loader和exports-loader的使用
webapck imports-loader和exports-loader的使用
- kettle的基本使用
一.下载下载kettlehttp://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...
- numpy.ravel() 与 numpy.flatten()
两者都可实现将多维数组降位一维的功能 numpy.flatten()返回拷贝,对拷贝所做的修改不会影响原始矩阵 numpy.ravel()返回视图,会影响原始矩阵 1)ravel() In [16]: ...
- 创建框架链接--frameset的连接方法
首先看下小编的目录架构 1.html将作为主页面 2.html将作为目录页面,里面有2个目录,分别是目录一和目录二 3.html为目录一将要链接的页面 4.html为目录二将要链接的页面 然后,看下1 ...
- php防止post数据刷新重复刷新。后退 等重复提交?
目前测试最好的办法:同步令牌(Token)机制来解决Web应用中重复提交的问题.还在研究中,稍后带来
- [LC] 485. Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- Nginx笔记:对url中携带的参数进行多次判断
Nginx中只支持简单的if语句,不支持多条件判断和嵌套,通过特殊的方式也可以达到效果 location / { proxy_set_header Host $host; proxy_set_head ...
- Mac使用sublime text3的快捷键
符号说明⌘:command⌃:control⌥:option⇧:shift↩:enter⌫:delete 打开/关闭/前往⌘⇧N 打开一个新的sublime窗口⌘N 新建文件⌘⇧W 关闭sublime ...