【7.10校内test】T2不等数列
此题在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不等数列的更多相关文章
- [模拟赛] T2 不等数列
Description 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个&qu ...
- Codevs 4357 不等数列
不等数列 [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式 ...
- 模拟赛 Problem 2 不等数列(num.cpp/c/pas)
Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...
- 【剑指offer】面试题 10. 斐波那契数列
面试题 10. 斐波那契数列 题目一:求斐波那契数列的第n项 题目描述:求斐波拉契数列的第n项 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++ 实现 ...
- 【6.10校内test】T2 医院设置
医院设置[题目链接] 感觉我超废 我是一个连floyd都不会写了的灵魂OI选手qwq(考场上写了半天spfa然后写炸了(微笑)) floyd的暴力: 1.先建树:用邻接矩阵存.存之前记得先初始化为IN ...
- 剑指offer第二版-10.斐波那契数列
面试题10:斐波那契数列 题目要求: 求斐波那契数列的第n项的值.f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n>1 思路:使用循环从下往上计算数列. 考点:考察对递归 ...
- luogu P2401 不等数列 |动态规划
题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"< ...
- 洛谷 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 不等数列
题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2015取模. 注:1~n的排列指的是1 ...
随机推荐
- jquery pageX属性 语法
jquery pageX属性 语法 作用:pageX() 属性是鼠标指针的位置,相对于文档的左边缘. 语法:event.page 参数: 参数 描述 event 必需.规定要使用的事件.这个 ...
- UOJ #460. 新年的拯救计划 神仙题+构造
对于这个神仙题,我还能说什么~ 第一个答案=$n/2$ 还是比较好猜的. 对于构造这个树,大概就是先从 $1$ 号节点向 $n/2$ 距离以内都连一条边,再在第 $n/2$ 个节点进行这个操作,然后从 ...
- 614A - Link/Cut Tree 数乘
A. Link/Cut Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- sklearn pca降维
PCA降维 一.原理 这篇文章总结的不错PCA的数学原理. PCA主成分分析是将原始数据以线性形式映射到维度互不相关的子空间.主要就是寻找方差最大的不相关维度.数据的最大方差给出了数据的最重要信息. ...
- oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法
转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...
- cursor url 自定义鼠标样式
cursor可以自定义鼠标,写法是cursor:url(“图片路径”),pointer; url:需使用的自定义光标的 URL.图片类型需要是.cur或.ani和jpg,png等格式的(.cur或.a ...
- 通过JVM日志来进行安全点分析
许多事件都可能会导致JVM暂停所有的应用线程.这类暂停又被称为”stop-the-world”(STW)暂停.触发STW暂停最常见的原因就是垃圾回收了(github中的一个例子),但不同的JIT活动( ...
- (转)mysql基础命令
Sql代码 asc 按升序排列 desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE ...
- linux pwd指令的C实现
linux pwd指令的C实现 pwd指令的功能介绍 linux pwd命令用于显示工作目录 执行pwd命令可立刻得知当前所在工作目录的绝对路径名称. 示例: 查询系统手册 如图所示,getcwd的描 ...
- 191107Django的Cookie和Session
Cookie的使用 from django.shortcuts import render,redirect def login(request): print("1",reque ...