#线性dp#洛谷 5999 [CEOI2016]kangaroo
题目
问有多少个长度为 \(n\) 的排列满足首项为 \(st\),末项为 \(ed\),
并且 \(\forall i\in (1,n),\left[a_{i-1}<a_i \oplus a_i<a_{i+1}\right]\),\(\oplus\) 表示异或
分析
这道题提供了一个求合法排列方案数的一种新方法。
设 \(dp[i][j]\) 表示前 \(i\) 个数,分成 \(j\) 段合法序列的方案数。
如果 \(i==st \or i==ed\) 那么要么新开一段或者直接并到左侧或右侧,也就是
\(dp[i][j]=dp[i-1][j-1]+dp[i-1][j]\)。
否则可以将这个当前最大数插入在两段之间,或者新开一段,但是首尾可能放不了,要减掉,也就是
\(dp[i][j]=dp[i-1][j+1]*j+dp[i-1][j-1]*(j-(i>st)-(i>ed))\)
初值 \(dp[1][1]=1\),答案为 \(dp[n][1]\)
代码
#include <cstdio>
using namespace std;
const int N=2011,mod=1000000007; int n,st,ed,dp[N][N];
int mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int main(){
scanf("%d%d%d",&n,&st,&ed);
dp[1][1]=1;
for (int i=2;i<=n;++i)
if (i==st||i==ed){
for (int j=1;j<=i;++j)
dp[i][j]=mo(dp[i-1][j-1],dp[i-1][j]);
}else{
int now=(i>st)+(i>ed);
for (int j=1;j<=i;++j)
dp[i][j]=mo(1ll*dp[i-1][j-1]*(j-now)%mod,1ll*dp[i-1][j+1]*j%mod);
}
return !printf("%d",dp[n][1]);
}
#线性dp#洛谷 5999 [CEOI2016]kangaroo的更多相关文章
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- dp 洛谷P1977 出租车拼车 线性dp
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...
- 区间DP 洛谷P2858牛奶零食
题目链接 题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格 输入:第一行n,之后是n个货物的初始价值 这道题不能用贪心做 ...
- P1279 字串距离 dp 洛谷
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...
- 经典DP 洛谷p1880 石子合并
https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...
- [DP]洛谷P1115最大子段和
题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一 ...
- 尼克的任务 dp 洛谷1280
蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...
- dp——洛谷 P1541 乌龟棋 —— by hyl天梦
题目:(转自 https://www.luogu.com.cn/problem/P1541) 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是 ...
- 洛谷 2409 dp 月赛题目
洛谷 2409 dp 洛谷十月月赛T1,一道有些interesting的dp题目,当时做的时候想的比较复杂,根本没有往dp的方向去想.. 非官方题解: 1.据说可以使用优先队列来处理,参见Uva119 ...
- 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并
洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...
随机推荐
- win32 - 使用VerQueryValue获得应用程序的名称
比如: Google Chrome: 类似于任务管理器中显示名字,见下图 那么我们就需要使用VerQueryValue, 从指定的版本信息资源中检索指定的版本信息.若要检索适当的资源,在调用VerQu ...
- redis7源码分析:redis 多线程模型解析
多线程模式中,在main函数中会执行InitServerLast void InitServerLast() { bioInit(); // 关键一步, 这里启动了多条线程,用于执行命令,redis起 ...
- live555开发笔记(一):live555介绍、windows上msvc2017编译和工程模板
前言 在pc上搭建流媒体服务器软件,打开视频接受推流,使用live555方案. live555介绍 Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输 ...
- LibModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板
前言 本文章讲解libmodbus. libModbus介绍 libmodbus是一个免费软件库,可根据Modbus协议发送/接收数据.该库用C编写,并支持RTU(串行)和TCP(以太网) ...
- CXP2.0的相机是否可以使用CXP1.1的Grabber
可以 答案是肯定的. 目前CXP共有2个发布版本: 2011年发布CXP1.1 2021年发布CXP2.1,向后兼容,新标准增加了同步功能.数据率放大了一倍. 只要是符合CXP标准.接插件匹配,那么C ...
- 【Azure 应用服务】Azure Function App在部署时候遇见 503 ServiceUnavailable
问题描述 在VS Code中编写好 Azure Function App代码后,通过 func azure functionapp publish 部署失败,抛出 503 Service Unava ...
- 【Azure 应用服务】Azure Function 不能被触发
问题描述 Azure Function 不能被Postman 触发,错误信息如下: Error: write EPROTO 4020778632:error:100000f7:SSL routines ...
- 【Azure 应用服务】可以在app service里建SFTP服务吗?
问题描述 怎样可以在App Service里建SFTP服务? 并不是说通过FTP的方式进行App Service的文件部署. 问题回答 不能通过 App Service 来搭建总计的SFTP服务,因为 ...
- C#实现图片对比
前言 虽然已经正式转JAVA了,但最近发现一个特别好的开源项目masuit,不仅提供很多简便的功能,还有图像的一些特殊操作功能. 下面就实现一个简单图像对比. 实现对比 代码如下,实现一个可以对比翻转 ...
- 深入解析ASP.NET Core MVC的模块化设计[下篇]
ASP.NET Core MVC的"模块化"设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载.<设计篇>介绍了 ...