DTOJ 4030: 排列计数

news/2025/2/12 4:25:16/

【题目描述】

求有多少个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$的答案变化。

转载于:https://www.cnblogs.com/ssoiRoor/p/9917052.html


http://www.ppmy.cn/news/291578.html

相关文章

联想微型计算机怎么开盖,联想Lenovo一体机C4030怎么拆开增加内存

很多人喜欢自己加内存来改善电脑配置&#xff0c;不过第一次操作不敢拆&#xff0c;担心弄坏了&#xff0c;其实操作不难。下面是学习啦小编收集整理的联想Lenovo一体机C4030如何拆后盖加内存&#xff0c;希望对大家有帮助~~ 联想Lenovo一体机C4030拆后盖加内存的方法 工具/原料…

联想微型计算机怎么开盖,联想C4030一体机怎么拆后盖加内存?

联想C4030一体机想要拆机安装内存&#xff0c;该怎么安装呢&#xff1f;下面我们就来看看详细的图文教程。 1、关机&#xff0c;关机前记得先把DVD弹出。原因一会儿再讲。 2、拔下电源&#xff0c;将一体机屏幕朝下&#xff0c;放在一个平面上。平面上铺上柔软的垫子或者泡沫板…

MSM261S4030H0R

MSM261S4030H0R&#xff0c;数字麦克风&#xff0c; I2S音频接口 MSM261S4030H0R 标题 MSM261S4030H0R I2S音频接口的数字麦克风 制造商敏芯微 型号 MSM261S4030H0R 外形尺寸&#xff1a;【4.72x3.76x1.25 mm】底部进声 功耗&#xff1a;【普通模式 - 750uA 】 低功耗模式&…

oracle4030,oracle ora-4030错误求解

本帖最后由 technicdove 于 2014-10-13 12:49 编辑 最近在巡检的时候发现一套新上的数据库出现了4030的错误 后面有出现了大量的07445错误。如下 Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0xFFFFFFFF7FFCBF48] [PC:0xFFFFFFFF7BFCC8A8, take_deferred_s…

oracle4030,ora-4030小结

出现原因&#xff1a; 当oracle进程向OS请求内存而无法满足时&#xff0c;会报出ora-4030错误&#xff0c;该错误表明oracle进程需要更多PGA或者UGA内存(MTS中UGA位于SGA中)&#xff1b; 大致的诱导原因有以下几种&#xff1a; 1 OS的物理内存或者swap不够;过大的SGA设置或者进…

oracle4030,Oracle错误 ORA-4030 解析

这个错误原因是Oracle服务器进程不能从操作系统上分配出更多内存。含有PGA(程序全局区)的进程其内存的分配取决于服务器的设置。对于dedicated服务器进程&#xff0c;其包含了stack堆栈和UGA(用户全局区), 保存有用户会话信息、游标信息和数据分类排序区。在多线程模式配置(sha…

oracle4030,Oracle技巧:ORA-4030 报错

这个错误原因是 Oracle 服务器进程不能从操作系统上分配出更多内存。含有PGA(程序全局区)的进程其内存的分配取决于服务器的设置。对于 dedicated 服务器进程&#xff0c;其包含了 stack 堆栈和 UGA(用户全局区), 保存有用户会话信息、游标信息和数据分类排序区。在多线程模式配…

分析和解决ora-4030错误 [操作系统,内存分配机制]

分析和解决ora-4030错误 ORA-4030意味着什么&#xff1f; 这个错误意味着oracle服务器进程不能从操作系统获得更多的内存。这里的内存指的是PGA(程序全局区)以及由配置决定的它的子项。对于专用的服务器进程&#xff0c;内存包括堆栈区、UGA&#xff08;用户全局区&#xff09…