【题目链接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 创建数据库表

    创建数据库表 如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE: #!/usr/bin/python # -*- coding: UTF-8 -*- ...

  2. Java中截取字符串中小数点前面的字符

    通过下标获取 String number = "2563.2154"; int index = number.indexOf("."); String intN ...

  3. 「TJOI2019」大中锋的游乐场

    题目链接 问题分析 比较明显的最短路模型.需要堆优化的dij.建图的时候注意细节就好. 参考程序 #include <bits/stdc++.h> #define LL long long ...

  4. webdriver驱动火狐浏览器报错:Unable to find a matching set of capabilities

    raise exception_class(message, screen, stacktrace)selenium.common.exceptions.SessionNotCreatedExcept ...

  5. 为EasyUI的dataGrid单元格增加鼠标移入移出事件

    onLoadSuccess: function (data) { $(".datagrid-row").mouseover(function (e) { var text = $( ...

  6. 黑马lavarel教程---6、简单验证

    黑马lavarel教程---6.简单验证 一.总结 一句话总结: 1.验证的最简单实例:$request的validate方法,验证通过可以继续进行,验证失败就重定向 2.中文提示可以用中文语言包 3 ...

  7. 如何下载github项目中的某一部分

    如何下载github项目中的某一部分 一.总结 一句话总结: 通过 DownGit 下载:原地址失败的话直接百度DownGit,一大堆可用的 通过 Chrome 插件 GitZip 进行下载(推荐) ...

  8. C++构造函数调用虚函数的后果

    #include <iostream> class cx { public: virtual void func() { std::cout << "func&quo ...

  9. leetcode-easy-sorting and searching- 278 First Bad Version

    mycode  96.42 # The isBadVersion API is already defined for you. # @param version, an integer # @ret ...

  10. yum源相关

    yum软件仓库默认配置文件/etc/yum.conf,此文件定义了yum在线下载的rpm包存放位置及下载后是否保存. [root@localhost ~]# head /etc/yum.conf[ma ...