题目链接

Solution

状态设计

设 \(f_{i, j}\) 为 \(1\) 到 \(i\) 的排列,其中有 \(j\) 个 \(\text{‘<’}\) 的方案数。

状态转移

尝试从 \(i\) 转移到 \(i + 1\),实质是考虑把 \(i + 1\) 插入到序列的哪个位置。

  • 如果插入到最左边,会新增一个大于号(\(1\) 种情况)
  • 如果插入到最右侧,会新增一个小于号(\(1\) 种情况)
  • 如果插入到一个小于号之间,会破坏一个小于号,产生一个小于号和一个大于号,相当于新增一个大于号(\(j\) 种情况)
  • 如果插入到一个大于号之间,会破坏一个大于号,产生一个大于号和一个小于号,相当于新增一个小于号(\(i - 1 - j\) 种情况)

综上所述:

  • 有 \(j + 1\) 种情况增加一个大于号,即 \(f[i + 1][j] \gets f[i][j] * (j + 1)\)
  • 有 \(i - j\) 种情况增加一个小于号,即 \(f[i + 1][j + 1] \gets f[i][j] * (i - j)\)

Code

#include <iostream>
#include <cstdio> using namespace std; const int N = 1005, P = 2015; int n, K, f[N][N]; int main() {
scanf("%d%d", &n, &K);
f[1][0] = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
(f[i + 1][j] += f[i][j] * (j + 1)) %= P;
(f[i + 1][j + 1] += f[i][j] * (i - j)) %= P;
}
}
printf("%d\n", f[n][K]);
}

最新文章

  1. HDOJ 1326. Box of Bricks 纯水题
  2. windows 下搭建简易nginx+PHP环境
  3. 配置handler vs2013 iis8.0
  4. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
  5. 异步请求Ajax
  6. Windows Azure 入门系列课程Windows Azure 入门系列课程
  7. syscolumns表中所有字段的意思
  8. Linux驱动设计—— 中断与时钟
  9. 用PC浏览器模拟手机浏览器(一):无扩展版
  10. hdu5773--The All-purpose Zero(LIS变形)
  11. html5储存篇(二)
  12. Nginx负载均衡和Keepalived的安装设置
  13. Android高效内存1:一张图片占用多少内存
  14. 12块钱搭建一个ss(包括一个免费服务器)
  15. IT服务(运维)管理实施的几个要点--序言
  16. JS自定义表单提交处理方案
  17. [bzoj1051]Popular Cows
  18. Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行
  19. PHP的curl查看header信息的功能(包括查看返回header和请求header)
  20. 有趣的electron(一)

热门文章

  1. JAVA 去除字符串前后的指定字符
  2. Python_案例_斐波那契数
  3. Java编译程序和运行过程详解
  4. Spark SQL | 目前Spark社区最活跃的组件之一
  5. 【建议收藏】阿里P7总结的Spring注解笔记,把组件注册讲的明明白白
  6. Camtasia中对录制视频进行编辑——行为
  7. jQuery 第九章 工具方法之插件扩展 $.extend() 和 $.fn.extend()
  8. starUML软件破解
  9. 面试题59 - II. 队列的最大值
  10. 经历与感想丨第15届CSUST-ACM程序大赛