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

现在有q个询问,每个询问给定n,k,问有多少排列是好的。答案对10^9+7取模。

显然是计数类dp,我们设f[i][j]表示对于一个1->i的排列,好的位置有j个的情况

考虑转移,显然f[i][j]->f[i+1][k]相当于插入一个i+1

那么我们考虑对j的影响,显然f[i][j]只能转移到f[i+1][j]或者f[i][j],因为这取决于你将i+1放在哪个位置上

如果放在一个不是好位置的两边,那么j就会+1,否则j不变,而且显然,不好的位置一定不连续(显然)

那么转移就十分简单了,参考code

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define M 1000000007
#define L long long
using namespace std;
void ad(int& x,L y){ x=(y+x)%M; }
int f[3010][3010]={0},s[3010][3010]={0},n;
int main(){freopen("permutation.in","r",stdin);freopen("permutation.out","w",stdout);f[1][0]=1; f[2][1]=2; f[3][1]=2; f[3][2]=4;for(int i=3;i<3000;++i){L pi=(i+1)-2,pj=2;for(int j=i-1;pi>=0;--j){ad(f[i+1][j],f[i][j]*pi);ad(f[i+1][j+1],f[i][j]*pj);pi-=2; pj+=2;}}for(int i=1;i<=3000;++i)for(int j=i-1;~j;--j){s[i][j]=s[i][j+1];ad(s[i][j],f[i][j]);}scanf("%d",&n);for(int x,y,i=0;i<n;++i){scanf("%d%d",&x,&y);printf("%d\n",s[x][y]);}
}

转载于:https://www.cnblogs.com/Extended-Ash/p/7846019.html

Jzoj5235 好的排列相关推荐

  1. leetcode 567. Permutation in String 字符串的排列 滑动窗口法

    题目 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列.换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1:输入: s1 = "ab" s ...

  2. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  3. LeetCode简单题之重新排列数组

    题目 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,-,xn,y1,y2,-,yn] 的格式排列. 请你将数组按 [x1,y1,x2,y2,-,xn,yn] 格式重新排列,返回重 ...

  4. LeetCode简单题之排列硬币

    题目 你总共有 n 枚硬币,并计划将它们按阶梯状排列.对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币.阶梯的最后一行 可能 是不完整的. 给你一个数字 n ,计算并返回可形成 完整阶 ...

  5. 数据、人工智能和传感器按COVID-19新冠流感排列

    数据.人工智能和传感器按COVID-19新冠流感排列 Data, AI and sensors arrayed against COVID-19 各国政府.卫生保健专业人士和工业界争先恐后地应对Cov ...

  6. 求得到一个字符串@“absdfasdfsdfdsafsd....”所有的排列

    //得到一个字符串@"absdfasdfsdfdsafsd...."所有的排列 length!/((相同项)!*(相同项)!)-(int )numberOfstring:(NSSt ...

  7. 基于css3 transform实现散乱的照片排列

    分享一款基于css3 transform实现散乱的照片排列.这是一款简单零散的css3相册排列特效下载.效果图如下: 在线预览    源码下载 实现的代码. html代码: <div class ...

  8. 多重集合的排列和组合问题

    多重集合的排列和组合问题 标签: permutationn2c扩展 2012-04-17 16:18 5671人阅读 评论(0) 收藏 举报  分类: 算法(12)  版权声明:本文为博主原创文章,未 ...

  9. java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值

    null export default { data() { return { resultArr:[] } }, mounted(){ this.sss('aaba','abac'); this.s ...

最新文章

  1. 第02章 PyTorch基础知识
  2. [Head First设计模式]身边的设计模式——适配器模式
  3. sony硬盘摄象机误格式化(fat32)的数据恢复
  4. leetcode 46 java,leetcode46.java
  5. CPU单核多核区别【转载】
  6. Java 数组及多维数组
  7. moore和mealy_Mealy机和Moore机的比较研究 目录
  8. 搭建gradle环境
  9. 瑞友天翼应用虚拟化系统服务器lP,瑞友天翼应用虚拟化系统 V6.0.6发版
  10. MATLAB——imhist函数
  11. Shell 脚本常用命令
  12. android 常用机型尺寸_目前主流的智能手机的屏幕尺寸与分辨率是多少?
  13. delphi 与 Excel数据交换
  14. Datawhale-深入浅出pytorch简介安装和基础知识
  15. 二弟机器人_2017中国机器人技能大赛今天在南京理工大学举行
  16. 荣耀10的android版本区别,荣耀10和荣耀V10哪个好?荣耀10与V10区别对比 (全文)
  17. 瑜岿科技综合能源管理系统助力企业节能降耗工作
  18. 防火墙/UTM/安全网关
  19. 动态IP分配协议:DHCP
  20. 全国最好吃的大学食堂来啦!隔壁小孩都馋哭了!

热门文章

  1. 程序员职业发展路线规划,快来康康你“修炼”到哪个段位了?
  2. 错误码如何设计才合理?
  3. 【顶尖技术人是怎样炼成的】清华博士的模型信仰——对话阿里云 MVP陈旸
  4. 基于触发机制的脚本系统
  5. 趣说游戏AI开发:曼哈顿街角的A*算法
  6. 游戏编程设计模式-state
  7. 用数学方法分析哪类游戏中的AI难度最大
  8. 剑网三缘起不赚钱也要为玩家送福利!这就是为了老玩家的情怀吧
  9. 上一局APP玩边画边猜,第1次见人使用道具,我的游戏体验上升了
  10. 程序员-真实学习之路