这个题乍一看就应该是DP,再看一眼数据范围,1000.。那就应该是了。然后就向DP的方向想,经过对小数据的计算可以得出,如果我们用f[i][j]来表示前i个数有j个是填了"<"的,那么f[i][j]显然可以表示为f[i][j]+=f[i-1][j]\*(j+1)+f[i-1][j-1] (i-j).

至于原因

1.与f[i-1][j-1]

在这种情况下,由于我们是从前往后去推的,所以当前加入的数一定比前面的都大。那么怎么才能使得其变为前n个有j个<呢?

仔细想一下你就会发现,你把这个数插入任何一个数后面,都必将“形成”一个小于号,但是如果我们插入到一个已经形成小于号的两数之间,则小于号数量就不会改变,因为前i-1个数都比当前的i小,所以一共有i-1个空位,但是又有j-1个空位已经形成<号,所以在这种情况下,前i个数形成的每一个有j-1个<的数列都可以形成(i-1)-(j-1)个新的前i个数中有j个<的数列,于是从f[i-1][j-1]能够推出f[i][j]的一部分为f[i-1][j-1]*((i-1)-(j-1))。

2.与f[i-1][j]

那么刚刚是说明了你加入这个数增加了一个小于号的情况。但如果我不增加呢?

我前i-1个数已经形成了j个<。那么我加入i使其不会增加小于号要怎么做呢?

由于上文我已经说过你把这样的i插入两个之间已经是<号的数之间是不会增加<的数量的。所以这样的空位,每一个形成前i-1数有j个<的数列就有j个这样的空位。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define re register
#define ll long long
#define mo 2015
using namespace std;
int n,k,l,f[][],ans;
int main()
{
cin>>n>>k;
for(re int i=;i<=n;i++)
{
f[i][i-]=;
f[i][]=;
}
for(re int i=;i<=n;i++)
{
for(re int j=;j<i-;j++)
{
f[i][j]+=f[i-][j]*(j+)+f[i-][j-]*(i-j);
f[i][j]%=mo;
}
}
cout<<f[n][k]%mo;
}

【P2401】不等数列(DP)的更多相关文章

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

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

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

  3. P2401 不等数列

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

  4. HUAS 1476 不等数列(DP)

    考虑DP. 如果把转移看出当前位填什么数的话,这样是有后效性的. 如果考虑当前的序列是将1至n依次插入序列中的话. 考虑将i插入1到i-1的序列中,如果插入到<号中或者首部,那么最后就会多出一个 ...

  5. 洛谷P2401 不等数列 题解

    可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...

  6. 洛谷 P2401 不等数列

    其实有两种方法来解这道题# 第一种:找规律(非正经) 一看,这玩意像是个杨辉三角,还左右对称呢 因为新插入一个数$n$,有$n+1$个位置可以选,所以总数就乘$n+1$,对应的$f[n+1][i]$也 ...

  7. 落谷 P2401 不等数列

    题目链接. Solution 状态设计 设 \(f_{i, j}\) 为 \(1\) 到 \(i\) 的排列,其中有 \(j\) 个 \(\text{'<'}\) 的方案数. 状态转移 尝试从 ...

  8. Codevs 4357 不等数列

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

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

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

随机推荐

  1. Python简单分布式爬虫

    分布式爬虫采用主从模式.主从模式是指由一台主机作为控制节点,负责管理所有运行网络爬虫的主机(url管理器,数据存储器,控制调度器),爬虫只需要从控制节点哪里接收任务,并把新生成任务提交给控制节点.此次 ...

  2. IOS学习笔记(五)——UI基础UIWindow、UIView

    在PC中,应用程序多是使用视窗的形式显示内容,手机应用也不例外,手机应用中要在屏幕上显示内容首先要创建一个窗口承载内容,iOS应用中使用UIWindow.UIView来实现内容显示. UIWindow ...

  3. 【BZOJ2140】稳定婚姻 Tarjan

    [BZOJ2140]稳定婚姻 Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. ...

  4. 巨蟒python全栈开发django14:Form组件

    1.form组件初识 2.常用字段测试 3.局部钩子和全局钩子 4.简单看源码

  5. Delphi Pdf的使用方法

    此方法安装了llPDFLib.v3.6 控件.对pdf左侧.右侧正文进行了操作. procedure TForm1.Button1Click(Sender: TObject); var node,nd ...

  6. python的基础数据类型笔记

    注意:此文章基于python3.0以上做的笔记. python的基础数据类型大体有一下几种 一.int int类型有以下几种方法 .bit_length 返回数据在内存中所占的比特位 如下: prin ...

  7. python多线程安全local()

    import time import threading from threading import local class Foo(local): pass # 实例化(创建)对象 foo = Fo ...

  8. 004-诠释 Java 工程师【二】

    三.框架篇 框架基础 反射:反射是Java开发的一类动态相关机制.因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念. 怎么表达反射? 能用反射做什么 ...

  9. 爬虫四 selenium模块详细参数

    selenium元素定位方法 一.访问页面并获取网页html from selenium import webdriver browser = webdriver.Chrome() browser.g ...

  10. Way to OpenSource

    @1:Follow any instructions in the readme and make sure that you can configure and run the project on ...