【题目链接luogu】

此题在luogu上模数是2015,考试题的模数是2012。

然后这道题听说好多人是打表找规律的(就像7.9T2一样)(手动滑稽_gc)

另外手动

sy,每次测试都无意之间bibi正解,然后说自己是不会做是个什么骚气操作。

所以我们来看真.题解;

SOLUTION:

首先,输入莫得什么好说的;

当然想用快读咱也拦不住(就是想用咬我啊);

咱可能最近因为学长讲了一道DP,印象比较深刻,所以咱居然看到这道题就想到正解应该是DP了!?

接下来就是设计DP状态了:

dp[i][j]表示i个数,恰有j个‘<’的排列方案数;

转移就很神奇很有意思了:

当我们已知dp[1~i-1][1~k]时,我们考虑求dp[i][j];

当数从i-1~i时,显然数列增加的数是大于1~i-1的(莫得因为什么,不好解释,感性理解);我们考虑把i这个数加在哪里:

①加在序列的最左侧:

因为i>1~i-1的任何一个数,所以一定是‘>’,因此对‘<’的多少没有影响;

②加在序列最右侧:

同理因为i>1~i-1任何一个数,所以当将i放在序列最右侧时,一定会增加一个‘<’;

③加在一个‘<’的中间:

实际上不会增加‘<’,因此不会对答案产生影响qwq;

④加在一个‘>’中间:

增加了一只‘<’。

所以由此我们可以推出状态转移方程:

当i加在第①③种情况时,不会产生新的‘<’,因此我们需要由dp[i-1][j]推过来。

可以计算1~i-1的序列中,共有j个‘<’号,然后还有①情况中的一种,共有j+1种情况是添加后不增加‘<’的,所以dp[i][j]+=dp[i-1][j]*(j+1);

当i加在第②④种情况时,会产生新的'<',因此我们也需要由dp[i-1][j-1]推得:

④情况:我们知道当前情况下1~i-1中共有j-1个‘>’,总共的符号数为i-2个,因此其中‘>’数为i-2-(j-1)=i-j-1个,再加上②情况的一种,所以共有i-j个可以产生一个新的‘<’;因此dp[i][j]+=dp[i-1][j-1]*(i-j);

转移方程:dp[i][j]=dp[i-1][j]*(j+1)+dp[i-1][j-1]*(i-j);//注意取模

然后是初始状态:

当我们有0个‘<’时,无论有几个数,这些数必须严格升序排列,也就是只有一种排列是满足有0个‘<’的;因此初始化:dp[1~n][0]=1;

最后的答案显然就是dp[n][k]了;

CODE:

#include<bits/stdc++.h>

using namespace std;

int n,k;
int dp[][]; int main(){
scanf("%d %d",&n,&k);
for(int i=;i<=n;i++) dp[i][]=;
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
dp[i][j]=(dp[i-][j]*(j+)%2015+dp[i-][j-]*(i-j)%2015)%2015;
}
}
printf("%d",dp[n][k]);
return ;
}

end-

【7.10校内test】T2不等数列的更多相关文章

  1. [模拟赛] T2 不等数列

    Description 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个&qu ...

  2. Codevs 4357 不等数列

    不等数列 [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式 ...

  3. 模拟赛 Problem 2 不等数列(num.cpp/c/pas)

    Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...

  4. 【剑指offer】面试题 10. 斐波那契数列

    面试题 10. 斐波那契数列 题目一:求斐波那契数列的第n项 题目描述:求斐波拉契数列的第n项 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++ 实现 ...

  5. 【6.10校内test】T2 医院设置

    医院设置[题目链接] 感觉我超废 我是一个连floyd都不会写了的灵魂OI选手qwq(考场上写了半天spfa然后写炸了(微笑)) floyd的暴力: 1.先建树:用邻接矩阵存.存之前记得先初始化为IN ...

  6. 剑指offer第二版-10.斐波那契数列

    面试题10:斐波那契数列 题目要求: 求斐波那契数列的第n项的值.f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n>1 思路:使用循环从下往上计算数列. 考点:考察对递归 ...

  7. luogu P2401 不等数列 |动态规划

    题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"< ...

  8. 洛谷 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 要 ...

  9. P2401 不等数列

    题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2015取模. 注:1~n的排列指的是1 ...

随机推荐

  1. head first 设计模式笔记3-装饰者模式:星巴兹饮料

    开放原则:类应该对扩展开放,对修改关闭. - 上篇博客中的观察者模式中,通过加入新的观察者,我们可以在任何时候扩展主题(Subject),而且不需向主题中添加代码. - 装饰者模式也完全遵循开放原则. ...

  2. 数组翻转的方法(java实现)

    数组翻转的方法(java实现),所谓数组翻转,就是将数组倒置,例如原数组为:{"a","b","c","d"},那么翻转 ...

  3. 暑假集训 #2 div1 I - Lada Priora 精度处理

    I - Lada Priora Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  4. PyQT5堆叠布局:切换界面(QStackedLayout)

    几乎所有的GUI界面都需要用到这个场景:在一个界面里面,点击不同的按钮显示不同的内容 在Qt设计师中没有堆叠布局,需要我们手动添加 在Qt设计师中,设计3个切换的页面,和一个主界面. 注意在主界面是两 ...

  5. netty实现客户端服务端心跳重连

    前言: 公司的加密机调度系统一直使用的是http请求调度的方式去调度,但是会出现网络故障导致某个客户端或者服务端断线的情况,导致很多请求信息以及回执信息丢失的情况,接着我们抛弃了http的方式,改为T ...

  6. UMG里没有"Prefab"怎么办?

    大家知道在Unity里做UI,利用Prefab是少不了的,但是在UE4里如何做呢? 这是实际工作中遇到的问题,我Google关键词“UMG Prefab","UMG resuabl ...

  7. Codeforces Round #201 (Div. 2). E--Number Transformation II(贪心)

    Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description You ar ...

  8. Spring boot之Hello World访问404

    (1)404 -- 确定地址是否输入正确,,此路径非彼路径 (2)404 -- 是否用对注解,此注解非彼注解 (3)404 -- 包路径是否正确,此包非彼包 (4)404 -- 确认类包是否正确,此类 ...

  9. git 指定自己的sshkey

    在服务器上生成ssh-key以后,需要把公钥放在github上,但是,这个公钥只能放在一个账户里,如果放在第二个账户里,就会提示这个key已经被用了,这是前提 一个可能的场景是这样的: 你们公司有好几 ...

  10. 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)

    我们这里达成的方式不是内外网切换,而是真正意义上的同时上内网和外网 原理: 通过构建虚拟机,利用usb外接网卡(某宝某东都有售,价格在50大洋左右)使虚机连接外网,然后开启虚拟机的unity模式 准备 ...