洛谷 P2401 不等数列
其实有两种方法来解这道题
# 第一种:找规律(非正经)
一看,这玩意像是个杨辉三角,还左右对称呢
因为新插入一个数$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;
}
```
**不喜勿喷**
### 请勿抄袭
洛谷 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 不等数列 题解
可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...
- 落谷 P2401 不等数列
题目链接. Solution 状态设计 设 \(f_{i, j}\) 为 \(1\) 到 \(i\) 的排列,其中有 \(j\) 个 \(\text{'<'}\) 的方案数. 状态转移 尝试从 ...
- [洛谷P3228] [HNOI2013]数列
洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...
- 【洛谷 P1667】 数列 (贪心)
题目链接 对于一个区间\([x,y]\),设这个区间的总和为\(S\) 那么我们在前缀和(设为\(sum[i]\))的意义上考虑到原操作其实就是\(sum[x−1]+=S\) , \(sum[x]+S ...
- 洛谷P1415 拆分数列[序列DP 状态 打印]
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- 洛谷P1415 拆分数列(dp)
题目链接:传送门 题目: 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输 ...
- 洛谷P1415 拆分数列
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- 洛谷 P1415 拆分数列 解题报告
拆分数列 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数. 如果有多组解,则输出使得最后一个 ...
随机推荐
- mac idea中的Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099问题
今天上午用的好好的就出现了这个问题 真是奇怪: Google了一番有以下解决办法: 1.hosts文件的问题: vi /etc/hosts文件 添加127.0.0.1 localhost里面 2.m ...
- Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer错误解决办法
严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"] java. ...
- Activiti中的log4j(slf4j)的配置
今天试了一下在Activiti中使用log4j来进行配置发现这个会出现问题,其实Activiti中的日志系统是采用的是slf4j而不是log4j 然后使用slf4j驱动log4j来做的 通过Proce ...
- Angular Universal(统一平台)笔记
angular官网高级文档AngularUniversal部分的翻译总结,这东西在angular4开始正式被官方支持了,目前其实支持的服务器端还没有很多,但好歹包括了node和DotNetCore,算 ...
- R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...
- dojo省份地市级联之省份Dao实现类(五)
dojo省份地市级联之省份Dao实现类 ProvinceDaoImpl.java: /** * */ package com.you.dao.impl; import java.util.ArrayL ...
- 错误代码: 1111 Invalid use of group function
1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:update t_user_info t inner join t_pro_ ...
- Column 'id' in where clause is ambiguous
1.错误描述 org.hibernate.exception.ConstraintViolationException: error executing work at org.hibernate.e ...
- offline页面开发常用方法及页面控件验证
offline页面开发常用方法及页面控件验证,对一些CheckBoxList操作进行封装,新人可以直接使用该代码. 1.返回上一页网址 /// <summary> /// Descript ...
- Linux查看网络的联机状态
Linux查看网络的联机状态 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ netstat -a^C unix 3 [ ] 流 已连接 14923 @/tmp ...