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]

答案就是

∑i=mnf[n][i]

代码

#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组】好的排列的更多相关文章

  1. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨

    5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...

  2. [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)

    题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...

  3. 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 ...

  4. JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)

    3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...

  5. JZOJ.5235【NOIP2017模拟8.7】好的排列

    Description 对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai.对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好 ...

  6. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  7. JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计

    5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...

  8. JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语

    4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms  Mem ...

  9. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

随机推荐

  1. 吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来

    动画是游戏开发中不可或缺的要素,游戏中的角色只有动起来才会拥有“生命”, 但动画处理也是最让游戏开发者头痛的部分.Pygame 包通过不断重新绘制绘图窗口,短短几行代码就可以让图片动起来! 动画处理程 ...

  2. sql常见面试(2)

    1.sql 删除表中重复数据保留一条 1)删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where   p ...

  3. linux环境下卸载mysql

    第一种使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可): # yum remove mysql mysql-server my ...

  4. 吴裕雄--天生自然 HADOOP大数据分布式处理:使用XShell远程连接主机与服务器并配置它们之间SSH免密登录

  5. CF-551:部分题目总结

    题目链接:http://codeforces.com/contest/1153 A .Serval and Bus pro:给出n种公交车的首班车时间和两班车之间的时间间隔,找t时间以后的第一辆车是第 ...

  6. java内部类基础知识

    一.java内部类具体分四大类 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部类 1.成员内部类             :作为类的成员,存在于类中  //成员内部类可以调用外部类的所有 ...

  7. java中Redis5大基本类型的用法

    存储格式 基本用法 通过Jedis(封装了redis的Java客户端)对redis进行操作. Jedis工具类 public class JedisPoolUtil { private static ...

  8. 自定义servlet重写doGet或doPost方法是如何实现多态的

    我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServle ...

  9. Nginx for windows 访问路径包含中文

    转载自http://blog.csdn.net/five824/article/details/48261213 Nginx for windows 访问路径包含中文 原创 2015年09月07日 0 ...

  10. 实战:Zabbix 3.4邮件报警配置

    环境:CentOS 7 + Zabbix 3.4 如果只是监测并不能满足需求,还需要通过邮件的方式对问题进行报警.接下来进行实战操作: 一.安装邮件发送工具 mailx 如果CentOS 有邮件服务, ...