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 ...
随机推荐
- BCrypt BCryptPasswordEncoder
package org.linlinjava.litemall.core.util.bcrypt; // Copyright (c) 2006 Damien Miller <djm@mindro ...
- Sam format
reference:https://davetang.org/wiki/tiki-index.php?page=SAM @SQ SN:contig1 LN:9401 (序列ID及长度) 参考序列名,这 ...
- 04-Java 对象和类
Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例 ...
- chkconfig原理
ll /etc/rc.d 里面有运行级别对应的脚本 chkconfig --list sshd ll /etc/rc.d/rc3.d/ | grep sshd (查看3启动 里面 ...
- 84)PHP,SQL注入基础讲解
怎么预防: 填写防止SQL注入的代码:
- vscode中的live-server配置https?
json文件中使用绝对路径添加证书 "liveServer.settings.https": { "enable": true, "cert" ...
- 深入JVM内核--JVM简介
JVM概念 jvm是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完成计算机系统. 目前主要有vmMare.visual Box和JVM三款虚拟机. JVM使用软件模拟java字节 ...
- [LC] 80. Remove Duplicates from Sorted Array II
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...
- [LC] 243. Shortest Word Distance
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- js原型理解
https://www.cnblogs.com/liuhw/p/10646717.html __proto__的默认指向:https://www.jianshu.com/p/686b61c4a43d