luogu P2401 不等数列 |动态规划
题目描述
将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。问在所有排列中,有多少个排列恰好有k个“<”。答案对2015取模。
注:1n的排列指的是1n这n个数各出现且仅出现一次的数列。
输入格式
第一行2个整数n,k。
输出格式
一个整数表示答案。
我们考虑现在我们已经有了n−1个数的排列,再插入nnn使其变成nnn个数的排列
显然,n有n个位置可以选择,我们先来考虑两边的位置。
如果插入到最左边,会造成新的序列比原来多一个大于号
如果插入到最右边,会造成新的序列比原来多一个小于号
其他的位置就是插入到大于号或小于号的位置
如果插入到大于号的位置,删去一个大于号,多一个大于号一个小于号,也就是多一个小于号
如果插入到小于号的位置,删去一个小于号,多一个大于号一个小于号,也就是多一个大于号
我们会发现插入一个数只有多一个小于号和小于号数目不变两种情况
我们用dp[i][j]表示i个数恰有j个小于号的排列数
那么显然
dp[i+1][j]+=dp[i][j]*(j+1)
dp[i+1][j+1]+=dp[i][j]*(i-j)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e3+10,mod=2015;
int n,k,dp[N][N];
signed main(){
cin>>n>>k;
dp[1][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++){
(dp[i+1][j]+=dp[i][j]*(j+1))%=mod;
(dp[i+1][j+1]+=dp[i][j]*(i-j))%=mod;
}
cout<<dp[n][k]<<endl;
}
luogu P2401 不等数列 |动态规划的更多相关文章
- 洛谷 P2401 不等数列 题解
每日一题 day25 打卡 Analysis dp[i][j]=dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1); 其中i和j是表示前i个数中有j个小于号,j<=i-1 要 ...
- P2401 不等数列
题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2015取模. 注:1~n的排列指的是1 ...
- 洛谷 P2401 不等数列
其实有两种方法来解这道题# 第一种:找规律(非正经) 一看,这玩意像是个杨辉三角,还左右对称呢 因为新插入一个数$n$,有$n+1$个位置可以选,所以总数就乘$n+1$,对应的$f[n+1][i]$也 ...
- Luogu 1415-拆分数列-动态规划
Solution 首先要找到使得最后一个数最小, 只需定义一个数组$pre[i]$ 从区间$[pre[i], i]$表示的数, 是最小的能使前面的数递增的方案. $[ pre[n], n]$即为最小的 ...
- 洛谷P2401 不等数列 题解
可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...
- 落谷 P2401 不等数列
题目链接. Solution 状态设计 设 \(f_{i, j}\) 为 \(1\) 到 \(i\) 的排列,其中有 \(j\) 个 \(\text{'<'}\) 的方案数. 状态转移 尝试从 ...
- Codevs 4357 不等数列
不等数列 [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式 ...
- CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)
CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划) Description 字符串是数据结构和计算机语言里很重要的数据类型,在计算机语言中,对于字符串我们有很多的操作定义,因 ...
- 模拟赛 Problem 2 不等数列(num.cpp/c/pas)
Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...
随机推荐
- PHP更新用户微信信息的方法
PHP更新用户微信信息的方法 大家都知道 授权登录一次 获取后 再登录就会提示已经授权登录 就没办法重新获得用户信息了 这个时候根据openid来获取了请求user/info这个获取ps:必须关注过公 ...
- vue2获取dom节点
vue2.*版本中 在标签中加上ref='dom',然后在代码中this.$refs.dom这样就拿到了页面元素 例如:<div class='box' ref='myBox'>你好< ...
- Nginx Linux和Windows安装教程
前言 本篇文章主要介绍的是Nginx Linux环境和Windows的安装教程. Nginx 介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Syso ...
- linux 修改IP地址(设置为静态ip)和主机名
主机名: server0.example.com ip地址: 172.25.0.11 网络掩码: 255.255.255.0 默认网关: 172.25.0.254 域名服务器:172.25.254.2 ...
- __FILE__ basename() 作用
__FILE__ basename() 作用 __FILE__ 获取当前文件或文件夹的绝对路径 basename(__FILE__) 获取当前文件或文件夹的名称 basename(__FILE__, ...
- hdu 2255 奔小康赚大钱 (KM)
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Docker+Dubbo+Zookeeper实现RPC远程调用
Docker+Dubbo+Zookeeper 1.安装Docker 1.1卸载旧版本的Docker //如果Docker处于与运行状态 未运行可跳过 [root@MrADiao ~]# systemc ...
- php5.6开启curl
1. 打开php安装目录,打开ext目录,是否有php_curl.dll扩展文件,如果没有该扩展文件,请在网上下载此文件. 2. 打开php.ini,找到 ;extension=php_cu ...
- 3个例子详解C++ 11 中push_back 和 emplace_back差异
本文首发于个人博客https://kezunlin.me/post/b83bc460/,欢迎阅读最新内容! cpp11 push_back and emplace_back Guide case1 # ...
- 20191017-3 alpha week 2/2 Scrum立会报告+燃尽图 02
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9799 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...