【题目链接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. Python内置类属性

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块(类的全名是'__main__. ...

  2. DVWA--CRSF

    首先我们对CRSF进行一个介绍 CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶 ...

  3. JSP之Bean

    <jsp:useBean id=" " class" "/>创建JavaBean对象,并把创建的对象保存到域对象 比如:<jsp:useBea ...

  4. 使用oracle数据库的开发流程

  5. spark 笔记 1: 如何着手

    必读:从官方的开发者页面着手,包括如何构建spark以及编码规范(强烈建议读读编程规范)等:https://cwiki.apache.org/confluence/display/SPARK/Cont ...

  6. shell脚本之awk、sed、grep案例

    1.BEGIN END用法user        DIR,内容显示用户名称.用户家目录   $NF为awk的内置变量,表示最后一行,$(NF-1)就表示倒数第二行,最后打印页脚 页眉显示 cat /e ...

  7. mysql数据库集群

    mysql数据库集群主要有2种常用方案: replication:速度快.弱一致性.适合保存低价值的数据,主要应用于日志.新闻.帖子等系统. PXC:速度慢.强一致性.适合保存高价值的数据,主要应用于 ...

  8. 全面解读PHP-JS和jQuery

    一.变量的定义 1.未使用值来申明的变量,其值为 undefined. 2.如果重新声明一个变量,该变量的值不会丢失. //定义一个变量 var str = 'hello'; //重新申明 var s ...

  9. eclipse subclipse svn 插件安装使用

    一.在线安装 1.打开Eclipse,菜单栏中选择"Help"->"Install New SoftWare..." 2.在弹出的对话框中,点击" ...

  10. tf工程化部署相关

    1.TensorFlow 模型保存/载入的两种方法 https://blog.csdn.net/thriving_fcl/article/details/71423039 [讲解清晰,2种方法都有缺陷 ...