火题大战Vol.0 B 计数DP
火题大战Vol.0 B
题目描述
\(n\) 个沙茶,被编号 \(1\)~$ n$。排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 \(1\)(\(+1\) 或\(-1\))就行;
现在想知道,存在多少方案满足沙茶们如此不苛刻的条件。
输入格式
只有一行且为用空格隔开的一个正整数 \(N\)。
输出格式
一个非负整数,表示方案数对 \(7777777\) 取模。
样例
样例输入
4
样例输出
2
样例解释
有两种方案 \(2\ 4\ 1\ 3\) 和 \(3\ 1\ 4\ 2\)
数据范围与提示
对于\(30\%\)的数据满足\(N \leq 20\)
对于\(100\%\)的数据满足\(1 \leq N \leq 1000\) ;
分析
我们设 \(f[i][j][0]\) 为填了 \(1\)到\(i\),当前有 \(j\) 对两两之间相差一的人,并且\(i\)和\(i-1\)不相邻的方案数
设 \(f[i][j][1]\) 为填了 \(1\)到\(i\),当前有 \(j\) 对两两之间相差一的人,并且\(i\)和\(i-1\)相邻的方案数
对于\(f[i][j][0]\),如果我们在这\(j\)对人的中间插入一个数,那么两两之间相差一的人会少一对,因为此时\(i\)和\(i-1\)不相邻
转移方程 \(f[i+1][j-1][0]+=j \times f[i][j][0]\)
如果我们在\(i\)的旁边插入\(i+1\),那么两两之间相差一的人会多一对,并且\(i\)和\(i+1\)相邻,因此会转移至 \(f[i+1][j+1][1]\)
转移方程 \(f[i+1][j+1][1]+=2 \times f[i][j][0]\)
此时,我们在剩下的位置插入不会对对数产生影响,即
\(f[i+1][j][0]+=(i-1-j) \times f[i][j][0]\)
对于\(f[i][j][1]\) 如果我们在\(i\)和\(i-1\)的中间插入\(i+1\),则有
\(f[i+1][j][1]+=f[i][j][1]\)
如果我们在\(i\)的另一边插入\(i+1\),则有
\(f[i+1][j+1][1]+=f[i][j][1];\)
如果我们在其它的 \(j-1\) 个空位中插入,则有
\(f[i+1][j-1][0]+=f[i][j][1]*(j-1)\)
如果我们在其它的空位中插入,则有
\(f[i+1][j][0]+=f[i][j][1]*(i-j)\)
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
#define int long long
int f[maxn][maxn][3];
const int mod=7777777;
signed main(){
int n;
scanf("%lld",&n);
f[2][1][1]=2;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
f[i+1][j-1][0]+=j*f[i][j][0];
f[i+1][j-1][0]%=mod;
f[i+1][j+1][1]+=2*f[i][j][0];
f[i+1][j+1][1]%=mod;
if(i-j-1>0){
f[i+1][j][0]+=(i-1-j)*f[i][j][0];
f[i+1][j][0]%=mod;
}
if(j-1>0) {
f[i+1][j-1][0]+=f[i][j][1]*(j-1);
f[i+1][j-1][0]%=mod;
}
f[i+1][j][1]+=f[i][j][1];
f[i+1][j][1]%=mod;
f[i+1][j+1][1]+=f[i][j][1];
f[i+1][j+1][1]%=mod;
f[i+1][j][0]+=f[i][j][1]*(i-j);
f[i+1][j][0]%=mod;
}
}
printf("%lld\n",f[n][0][0]);
return 0;
}
火题大战Vol.0 B 计数DP的更多相关文章
- 金题大战Vol.0 C、树上的等差数列
金题大战Vol.0 C.树上的等差数列 题目描述 给定一棵包含\(N\)个节点的无根树,节点编号\(1-N\).其中每个节点都具有一个权值,第\(i\)个节点的权值是\(A_i\). 小\(Hi\)希 ...
- 火题大战Vol.1 A.
火题大战Vol.1 A. 题目描述 给定两个数\(x\),\(y\),比较\(x^y\) 与\(y!\)的大小. 输入格式 第一行一个整数\(T\)表示数据组数. 接下来\(T\)行,每行两个整数\( ...
- 金题大战Vol.0 A、凉宫春日的叹息
金题大战Vol.0 A.凉宫春日的叹息 题目描述 给定一个数组,将其所有子区间的和从小到大排序,求第 \(k\) 小的是多少. 输入格式 第一行两个数\(n\),$ k\(,表示数组的长度和\)k$: ...
- 金题大战Vol.0 B、序列
金题大战Vol.0 B.序列 题目描述 给定两个长度为 \(n\) 的序列\(a\), \(b\). 你需要选择一个区间\([l,r]\),使得\(a_l+-+a_r>=0\)且\(b_l+-+ ...
- 土题大战Vol.0 A. 笨小猴 思维好题
土题大战Vol.0 A. 笨小猴 思维好题 题目描述 驴蛋蛋有 \(2n + 1\) 张 \(4\) 星武器卡片,每张卡片上都有两个数字,第 \(i\) 张卡片上的两个数字分别是 \(A_i\) 与 ...
- 水题大战Vol.3 B. DP搬运工2
水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...
- [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解
前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...
- [火星补锅] 水题大战Vol.2 T1 && luogu P1904 天际线 题解 (线段树)
前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以 ...
- [Hdu-5155] Harry And Magic Box[思维题+容斥,计数Dp]
Online Judge:Hdu5155 Label:思维题+容斥,计数Dp 题面: 题目描述 给定一个大小为\(N*M\)的神奇盒子,里面每行每列都至少有一个钻石,问可行的排列方案数.由于答案较大, ...
随机推荐
- python基础--小数据池,代码块的最详细、深入剖析
本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ...
- C#怎么统计网站当前在线人数
1.问题背景 c#网站怎么合理的统计在线人数?我想通过全局变量来统计软件的使用情况,当启动软件时向服务器的用户表写开始使用时间,正常退出时写一个结束使用时间,来统计用户的在线使用情况. 但是有一个问题 ...
- pandas_数据排序
import pandas as pd # 设置列对齐 pd.set_option("display.unicode.ambiguous_as_wide",True) pd.set ...
- 使用 MySQLi 和 PDO 向 MySQL 插入多条数据
PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...
- 2020牛客暑期多校训练营 第二场 J Just Shuffle 置换 群论
LINK:Just Shuffle 比较怂群论 因为没怎么学过 置换也是刚理解. 这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\) 且k是一个大质数. 做法是李指导教我 ...
- C/C++编程笔记:流行的数字游戏【2048】,C语言400行源代码分享
游戏介绍 你玩过2048吗?2048是一款流行于各大网页和手机的数字游戏,手机安卓版推出的是<挑战2048>,之后的版本中还加入了双人对战的游戏模式,更加受到玩家的热捧. 2048的游戏规 ...
- 发送ajax请求时候注意的问题
1.在发送ajax请求一般都是默认为异步,就是不去等待后台响应直接可以继续发送, 但这样会有时候遇到一些问题,无法获得后台的响应参数, 所以在你打开编辑弹出框完成数据编辑后无法刷新页面, 这时候可能存 ...
- Python实现微信读书辅助工具
[TOC] ##项目来源 这个有意思的项目是我从GitHub上找来的,起因是在不久前微信读书突然就设置了非会员书架数目上限,我总想做点什么来表达我的不满,想到可否用爬虫来获取某一本书的内容, 但是我技 ...
- Spring 自动装配机制
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- Springboot+swagger2.7集成开发
Springboot+swagger2.7集成开发 本篇文章是介绍最新的springboot和swagger2.7集成开发和2.0稍微有一些出入: Springboot集成环境配置 Swagger2. ...