其实有两种方法来解这道题
# 第一种:找规律(非正经)


一看,这玩意像是个杨辉三角,还左右对称呢

因为新插入一个数$n$,有$n+1$个位置可以选,所以总数就乘$n+1$,对应的$f[n+1][i]$也就等于$f[n][i]$了大概。可是一看,不大对,好像不是这样。那么就像,反正加一个数要么没变,要么加一个小于号,那么不在$f[n+1][i]$的一定是分到了$f[n+1][i+1]$里去了。那么以$n=3$时为例,$f[3][1]*4=4,f[4][1]=1$也就是接收了$1$倍的$f[3][1]$。那么就有$3$个分到$f[4][2]$里去了。$f[3][2]*4=16,f[4][2]=11$,而$f[4][2]$已经有$3$个,那么就接收了来自$f[4][2]$的$8$个,也就是$2$倍的$f[3][2]$。······以此类推,大概就得出了$f[n+1][i]+=f[n][i]*(i+1),f[n+1][i+1]+=f[n][i]*(n-i)$的规律

-----------------------------------------------手动分割线------------------------------------------------

# 第二种:数学方法推
**这是正经方法**

前面说过,加入一个数$n$,有$n$+$1$个位置可以选,可以插在两旁或者不等号的位置,因为新插入的数一定是最大的,所以插在最左边多一个大于号,而插在最右边多一个小于号。

那么问题来了,如果插在不等号的位置呢?

首先,明确一下,插入在不等号位置后,一个不等号会变为两个不等号,由于新插入的数一定是最大的,所以这两个不等号中前面的一定是小于号,后面的一定是大于号。那么就很明显了,如果这个位置原来是小于号,那么插入$n$之后,小于号数不变;如果原来是大于号,那么插入$n$之后,小于号数+$1$。那么原本有$i$个数$j$个小于号,加上一个数后便会有$j+1$种小于号不变$i-j$种小于号$+1$的情况。

上代码

先是**暴力版**(通不过的,这是帮助我打出那张图的版本)
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1005;
int f[maxn],n,ans[maxn];
bool s[maxn];
void dfs(int step){
if(step>n){
int sum=0;
for(int i=1;i<n;i++)sum+=f[i]<f[i+1]?1:0;
ans[sum]++;
return;
}
for(int i=1;i<=n;i++)
if(!s[i]){
s[i]=1;
f[step]=i;
dfs(step+1);
s[i]=0;
}
}
int main(){
scanf("%d",&n);
dfs(1);
for(int i=0;i<n;i++)printf("%d ",ans[i]);
}
```

然后上
## 正常版本
```cpp
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=1005;
int n,k,f[maxn][maxn];
int main(){
//freopen("num.in","r",stdin);
//freopen("num.out","w",stdout);
scanf("%d%d",&n,&k);
if(k>(n-1)/2)k=n-k-1;
f[1][0]=1;
for(int i=1;i<n;i++){
for(int j=0;j<=(i-1)/2;j++){//由于它类似于杨辉三角,左右对称,所以只求左侧就好
f[i+1][j]=(f[i+1][j]+f[i][j]*(j+1))%2015;
f[i+1][j+1]=(f[i+1][j+1]+f[i][j]*(i-j))%2015;
}
if(i%2==0)f[i+1][i/2]=(f[i+1][i/2]*2)%2015;
}
printf("%d",f[n][k]);
return 0;
}
```
**不喜勿喷**
### 请勿抄袭

最新文章

  1. awk,perl,python的命令行参数处理
  2. CSS元素水平居中和垂直居中的方法大全
  3. ES6新增Promise
  4. CAS(Compare and Swap)理解
  5. ThinkPHP - URL生成(U函数)
  6. .NET 各种问题汇总
  7. mysql批量数据脚本
  8. 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)
  9. 【c# 数据库】对数据库进行增删查改
  10. Wireless Penetration Testing(命令总结)
  11. jenkins + nodejs + git 自动化部署前端
  12. 使用idea,springboot,springsession,redis实现分布式微服务的session 共享
  13. MySQL(动态执行SQL)
  14. Kubernetes dashboard 配置
  15. HDU 5399 Too Simple(过程中略微用了一下dfs)——多校练习9
  16. SQL on Hadoop 的真相(1)
  17. C++实现设计模式之-装饰模式
  18. name相同获取值
  19. 【Head First Servlets and JSP】笔记
  20. matlab练习程序(Arnold图像置乱)

热门文章

  1. WinForm中ClickOnce发布至广域网
  2. Spring框架系列之AOP思想
  3. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
  4. DxPackNet 1.打开摄像头
  5. ansible基本使用教程
  6. mysql 学习心得5
  7. dd命令的巧妙使用
  8. Spring初始化ApplicationContext为null
  9. Hdfs读取文件到本地总结
  10. 转 Caffe学习系列(3):视觉层(Vision Layers)及参数