【题目描述】

求有多少个1到n的排列满足恰有$k$对在排列中相邻的数满足前小于后,答案对2012取模。

【输入】

一行2个正整数$n,k$。

【输出】

输出一个整数表示答案。

【样例输入】

  5  2

【样例输出】

  66

【数据范围】

  $k<n<=1000$

分析:

计数类问题,应该是个式子或者DP

考虑$k$和$n$都不大考虑DP。$f[i][j]$表示$n=i$,$k=j$时的答案。

那么考虑怎么转移,考虑将$i$插入长度为$i-1$的排列中,对答案的影响。有$f[i][j]=f[i-1][j]*(j+1)+f[i-1][j-1]*(i-j)$

$f[i-1][j]*(j+1)$表示将$i$插入后满足要求的数对没有变多,因为$i$大于$i-1$排列中的任意一个,所以将$i$插入$j$个以满足的数对中的任意一个都不会使得满足条件的数对变多,又或者直接将$i$放在第一个。

$f[i-1][j-1]*(i-j)$表示将$i$插入后数对变多了,也是因为$i$大于$i-1$排列中的任意一个,所以只要不插入到$j-1$个已经满足的数对中即可,那么就会有$(i-2)-(j-1))$,加上最后一个位置就是$i-j$了。

初值为$f[i][0]=1$,可以用打表和DP式子来判断。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 1005
#define p 2012
using namespace std;
int n,k,f[N][N];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) f[i][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
f[i][j]=(f[i-1][j]*(j+1)%p+(f[i-1][j-1]*(i-j))%p)%p;
printf("%d\n",f[n][k]);
return 0;
}

总结:

计数类问题,一般都是排列组合DP。尤其是在数据范围不太大,DP状态可以表示时,要考虑DP。

其实也不能算是DP,更准确的说应该是递推,考虑从$i$到$i+1$的答案变化。

DTOJ 4030: 排列计数的更多相关文章

  1. BZOJ 4517: [Sdoi2016]排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 911  Solved: 566[Submit][Status ...

  2. bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)

    题目链接: 4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 846  Solved: 530[Submit][ ...

  3. ACM/ICPC 之 DP-浅谈“排列计数” (POJ1037)

    这一题是最近在看Coursera的<算法与设计>的公开课时看到的一道较难的DP例题,之所以写下来,一方面是因为DP的状态我想了很久才想明白,所以借此记录,另一方面是看到这一题有运用到 排列 ...

  4. 数学(错排):BZOJ 4517: [Sdoi2016]排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 693  Solved: 434[Submit][Status ...

  5. 【数论·错位排列】bzoj4517 排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1428  Solved: 872[Submit][Statu ...

  6. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  7. BZOJ 2111: [ZJOI2010]Perm 排列计数 [Lucas定理]

    2111: [ZJOI2010]Perm 排列计数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1936  Solved: 477[Submit][ ...

  8. bzoj4517排列计数 错排+组合

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1491  Solved: 903[Submit][Statu ...

  9. BZOJ_4517_[Sdoi2016]排列计数_组合数学

    BZOJ_4517_[Sdoi2016]排列计数_组合数学 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[ ...

随机推荐

  1. Beta_Scrum Meeting_0

    日期:2021年5月26日 参会人员:cy.hcc.lsc.dxh 会议主题:为Beta阶段最早两日的开发制定目标 一.进度情况 组员 负责 两日内完成的任务 接下来两日预计完成的任务 hcc 前端 ...

  2. [no_code][Beta] 中期组内总结

    $( "#cnblogs_post_body" ).catalog() 目前scrum meeting beta阶段目前共7次.在alpha阶段我们博客发布时间比较匆忙,是扣分项, ...

  3. 百度OCR技术博客

    百度OCR工具链使用 百度OCR的API使用总体来说比较容易,主要步骤为:注册云平台并登录,选择服务并创建应用,保存API Key以及Secret Key,选择调用API. 注册登录百度云平台 首先需 ...

  4. FastAPI 学习之路(五十九)封装统一的json返回处理工具

    这之前的接口,我们返回的格式都是每个接口异常返回的数据格式都会不一样,我们处理起来没有那么方便,我们可以封装一个统一的json处理. 那么我们看下如何来实现呢 from fastapi import ...

  5. 零基础学习STM32之入门学习路线

    可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...

  6. Python:Ubuntu上使用pip安装opencv-python出现错误

    Ubuntu 18.04 上 使用 pip 安装 opencv-python,出现的错误如下: 1 ~$: pip install opencv-python -i https://pypi.tuna ...

  7. STM32程序异常——中断处理要谨慎

    问题背景 最近有一个新项目(车载项目),板子上除了原来的ARM + STM32F030K6Tx又多了一个8bit的mcu的单片机,这可真是嵌入式全家福了. 系统的主要核心工作是由arm来完成,但是在开 ...

  8. vim vi 高亮第80列 Python PEP8规范 行最大长度设置

    命令模式下 :set cc=80 或者 打开 vim的配置 文件 .vimrc vim ~/.vimrc 接着你会看到你的配置文件 在配置文件中加上这样行配置代码 set cc=80 ok 现在退出v ...

  9. 一、安装zabbix监控(源码编方式)

    首先介绍一下zabbix的运行原理和运行条件. Zabbix监控原理 Zabbix 通过C/S 模式采集数据,通过B/S模式在web 端展示和配置.  被监控端:主机通过安装agent 方式采集数据, ...

  10. 你们不要再吵了! Java只有值传递..

    写在前边 上次聊到Java8新特性 lambda时,有小伙伴在评论区提及到了lambda对于局部变量的引用,补充着博客的时候,知识点一发散就有了这篇对于值传递还是引用传递的思考.关于这个问题为何会有如 ...