6.28 不等序列

Problem 2 不等数列(num.cpp/c/pas)

【题目描述】

将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。问在所有排列中,有多少个排列恰好有k个“<”。答案对2012取模。

【输入格式】

第一行2个整数n,k。

【输出格式】

一个整数表示答案。

【样例输入】

5 2

【样例输出】

66

【数据范围】

对于30%的数据:n <= 10

对于100%的数据:k<n<=1000,

乍一看,好像是动态规划,仔细看,还真是动态规划(以上为本人卖萌)

说正经题解:

因为此题只需要得出数字之间的大小关系,而并不需要得出具体的数字之间的差值,所以可以看为从小到大向一个数列中插入数字,这样就是只需要记录第几个数字被插入就可以了,同时记录插入到这时的“<”的数量。

使用一个二维数组记录,分别记录插入的数字与已有的“<”个数,于是转移方程就出来了:

f[i][j]=(f[i-1][j-1]*(i-j))+(f[i-1][j]*(j+1))

这由两种情况组成:

插入“<”连接的两个数字之中,由于是从大到小插入,所以小于号数量并没有改变

如果插入">"连接的两个数字中,小于号会增加一个。

最后f[n][k]就是答案

 

另附代码:

#include <cstdio>

int n,k,i,j;

int f[1003][1003];

int read()

{

  int y=0;char x=getchar();

  while(x>=‘0‘&&x<=‘9‘)

  {

  y=y*10+x-‘0‘;

  x=getchar();

  }

  return y;

}

int main()

{

    n=read();k=read();

    for(i=1;i<=n;i++) f[i][0]=1;

    f[2][1]=1;

    for(i=3;i<=n;i++)

    {

        for(j=1;j<i;j++)

        {

            f[i][j]=(f[i-1][j-1]*(i-j))%2015+(f[i-1][j]*(j+1))%2015;

        }

    }

    printf("%d",f[n][k]%2015);

    return 0;

时间: 2024-10-31 13:52:09

6.28 不等序列的相关文章

28 python 序列的乘法(字符串乘法)检查某个值是否属于一个序列 求序列的长度、最大值和最小值

第四课:序列的乘法(字符串乘法) # 序列的乘法 # 序列和一个整数相乘 序列的乘法 可以达到 复制 整数份的字符串的效果 s = "a" print(s * 12) # aaaaaaaaaaaa numbers = [1,2,3,4,5] print(numbers * 3) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] # 打印正三角 * 号的功能 ''' [' ', ' ', ' ', ' ', ' ', '*', ' ', '

隐马尔可夫模型的前向算法(java实现),今天奉上

隐马尔可夫模型的前向算法(手动实现),今天奉上,由于研究生期间,实现的时候没有多加注释,这里为了让更好的人进入自然语言处理领域,特此,将前向算法奉上,具体公式可参考52nlp的HMN系列博客. 参考了大部分网站公式和借鉴.在此表示感谢. 后向算法和维特比算法,后续更新. HMM类: 1 package jxutcm.edu.cn.hmm.model;  2   3 import jxutcm.edu.cn.hmm.bean.HMMHelper;  4   5 /**  6  * 实现了 HMM(

Oracle常用知识总结

1.曾经不小心把开发库的数据库表全部删除,当时吓的要死.结果找到下面的语句恢复到了1个小时之前的数据!很简单. 注意使用管理员登录系统: select * from 表名 as of timestamp sysdate-1/12   //查询两个小时前的某表数据!既然两小时以前的数据都得到了,继续怎么做,知道了吧.. 如果drop了表,怎么办??见下面: drop table 表名; 数据库误删除表之后恢复,不过要记得删除了哪些表名. flashback table 表名 to before d

Oracle常用

Oracle恢复误删的数据或表,解除锁定SQL或table 转载于: http://renjie120.iteye.com/ 注释:本文转自网络,转载请注明 注意:数据库版本是10g,不过大部分9i的也适用,闪回9i就没有. 1.曾经不小心把开发库的数据库表全部删除,当时吓的要死.结果找到下面的语句恢复到了1个小时之前的数据!很简单. 注意使用管理员登录系统: select * from 表名 as of timestamp sysdate-1/12   //查询两个小时前的某表数据!既然两小时

8B/10B编码(转)

8B/10B编码是目前高速串行通信中经常用到的一种编码方式,直观的理解就是把8bit数据编码成10bit来传输,为什么要引入这种机制呢?其根 本目的是“直流平衡”.当高速串行流动逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶段关系而造成信号错误,直流平衡的最大好处便是 可以克服以上问题. 将8bit编码成10bit后,10B中0和1的位数只可能出现3中情况: 1.有5个0和5个1 2.有6个0和4个1 3.有4个0和6个1 这样引出了一个新术语“不均等性”,就是1的位数和0的位

8B/10B编码(转)

from:http://blog.sina.com.cn/s/blog_4b2657890100hdcl.html orig:http://en.wikipedia.org/wiki/8B10B 8B/10B编码是目前高速串行通信中经常用到的一种编码方式,直观的理解就是把8bit数据编码成10bit来传输,为什么要引入这种机制呢?其根本目的是“直流平衡”.当高速串行流动逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶段关系而造成信号错误,直流平衡的最大好处便是可以克服以上问题.

Ajax--serialize应用表单数据序列化

一.jQuery+Ajax表单数据序列化 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <p id="results"><b>Results: </b> </p>

Java8速查手册

Stream方法介绍ListMapArrayoptionallamda常用方法 toc Stream Java8 Stream 使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合进行链状流式的操作. 方法介绍 #filter():对流的元素过滤 List<PersonModel> collect1 = data.stream().filter(person -> ("男".equals(person.getSex())&&person.get

PyTorch LSTM的一个简单例子:实现MNIST图片分类

在上一篇博客中,我们实现了用LSTM对单词进行词性判断,本篇博客我们将实现用LSTM对MNIST图片分类.MNIST图片的大小为28*28,我们将其看成长度为28的序列,序列中的每个数据的维度是28,这样我们就可以把它变成一个序列数据了.代码如下. ''' 本程序实现用LSTM对MNIST进行图片分类 ''' import torch import numpy as np import torch.nn as nn import torch.utils.data as Data import t