落谷 P2401 不等数列
2024-10-18 18:54:13
题目链接。
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]);
}
最新文章
- HDOJ 1326. Box of Bricks 纯水题
- windows 下搭建简易nginx+PHP环境
- 配置handler vs2013 iis8.0
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
- 异步请求Ajax
- Windows Azure 入门系列课程Windows Azure 入门系列课程
- syscolumns表中所有字段的意思
- Linux驱动设计—— 中断与时钟
- 用PC浏览器模拟手机浏览器(一):无扩展版
- hdu5773--The All-purpose Zero(LIS变形)
- html5储存篇(二)
- Nginx负载均衡和Keepalived的安装设置
- Android高效内存1:一张图片占用多少内存
- 12块钱搭建一个ss(包括一个免费服务器)
- IT服务(运维)管理实施的几个要点--序言
- JS自定义表单提交处理方案
- [bzoj1051]Popular Cows
- Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行
- PHP的curl查看header信息的功能(包括查看返回header和请求header)
- 有趣的electron(一)
热门文章
- JAVA 去除字符串前后的指定字符
- Python_案例_斐波那契数
- Java编译程序和运行过程详解
- Spark SQL | 目前Spark社区最活跃的组件之一
- 【建议收藏】阿里P7总结的Spring注解笔记,把组件注册讲的明明白白
- Camtasia中对录制视频进行编辑——行为
- jQuery 第九章 工具方法之插件扩展 $.extend() 和 $.fn.extend()
- starUML软件破解
- 面试题59 - II. 队列的最大值
- 经历与感想丨第15届CSUST-ACM程序大赛