JZOJ.5235【NOIP2017模拟8.7】好的排列
Description
现在有q个询问,每个询问给定n,k,问有多少排列是好的。答案对10^9+7取模。
Input
首先输入q。
接下来输入q个询问n,k 。
Output
输出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
对于40%的数据,n<=20,q=1
对于60%的数据,n<=100
对于100%的数据,n,k<=3000,q<=10000
正难则反,我们可以考虑下“坏数字”(谷峰)($a_{i-1} < a_{i}>a_{i+1}$)。数位动规,数字的位置变换我们可以想象成插入,令F[i][j]表示到第i个数字,此时有j个谷峰的合法插入方案数,则第i个数字如果查到j个坏数字的两侧,则不会产生新的“谷峰”,那么有2*j个位置,F[i][j]*(2*j)-->F[i+1][j],如果插到其他位置,则会产生一个新的“谷峰”(序列两侧可以分别假想有个0),那么有(i-2*j)个位置,F[i][j]*(i-(2*j))-->F[i+1][j+1].初始条件F[1][1]=1,最后$ans=\sum _{i=1}^{n-k}f\left[ n\right] \left[ i\right]$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define qaq 1000000007
using namespace std;
int n,k,q;
long long f[][];
long long ans;
int main(){
freopen("permutation.in","r",stdin);
freopen("permutation.out","w",stdout);
f[][]=;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (!f[i][j])
f[i][j]=f[i-][j]*(*j)%qaq+f[i-][j-]*(i-*(j-))%qaq;
scanf("%d",&q);
while (q--){
scanf("%d%d",&n,&k);;
ans=;
for (int i=n-k;i>=;i--)
ans=(ans+f[n][i])%qaq;
printf("%lld\n",ans);
}
return ;
}
神奇的代码
(事实上我们可以预处理n,k到3000的值最后再直接累加即可)
JZOJ.5235【NOIP2017模拟8.7】好的排列的更多相关文章
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...
- 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 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- 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【NOIP2013模拟联考14】隐藏指令
JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...
- JZOJ.5281【NOIP2017模拟8.15】钦点
Description
- [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)
题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...
随机推荐
- Spring+Hibernate整合
因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性 db.sql hibernate_basic数据库 表 person 字段 pid ...
- epoll反应堆模型
================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) 1. 普通多路IO转接服务器: 红黑树 ― ...
- Jetty - Container源码分析
1. 描述 Container提供管理bean的能力. 基于Jetty-9.4.8.v20171121. 1.1 API public interface Container { // 增加一个bea ...
- TomEE
https://tomee.apache.org/ Apache TomEE, pronounced "Tommy", is an all-Apache Java EE 6 Web ...
- flink on yarn部分源码解析
转发请注明原创地址:https://www.cnblogs.com/dongxiao-yang/p/9403427.html flink任务的deploy形式有很多种选择,常见的有standalone ...
- 哪个线程执行 CompletableFuture’s tasks 和 callbacks?
CompletableFuture尽管在2014年的三月随着Java8被提出来,但它现在仍然是一种相对较新潮的概念.但也许这个类不为人所熟知是好事,因为它很容易被滥用,特别是涉及到使用线程和线程池的时 ...
- redis命令_ZRANGE
ZRANGE key start stop [WITHSCORES] 返回有序集 key 中,指定区间内的成员. 其中成员的位置按 score 值递增(从小到大)来排序. 具有相同 score 值的成 ...
- Python随手记
类属性的本质是变量对象. os.path.abspath(path) 返回绝对路径,如果填入相对路径,默认会在前面加上当前目录,组合成绝对路径. >>> os.path.abspat ...
- SpringBoot+Shiro引起事务失效、错误原因、解决方法
一.问题今天发现用户注册的Service的事务并没有起到作用,再抛出一个RuntimeException后,并没有发生回滚,下面是调试步骤: 1.检查数据库的引擎是否是innoDB 2.启动类上是否加 ...
- invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法
今天碰到个问题,解决了很久才搞定,来记录下,希望可以帮助到大家 贴错误源码: 这是一个根据list集合的查找数据的 sql,在接收list的时候加了判断 list != ‘ ’ “”,引起了集合与St ...