火题大战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的更多相关文章

  1. 金题大战Vol.0 C、树上的等差数列

    金题大战Vol.0 C.树上的等差数列 题目描述 给定一棵包含\(N\)个节点的无根树,节点编号\(1-N\).其中每个节点都具有一个权值,第\(i\)个节点的权值是\(A_i\). 小\(Hi\)希 ...

  2. 火题大战Vol.1 A.

    火题大战Vol.1 A. 题目描述 给定两个数\(x\),\(y\),比较\(x^y\) 与\(y!\)的大小. 输入格式 第一行一个整数\(T\)表示数据组数. 接下来\(T\)行,每行两个整数\( ...

  3. 金题大战Vol.0 A、凉宫春日的叹息

    金题大战Vol.0 A.凉宫春日的叹息 题目描述 给定一个数组,将其所有子区间的和从小到大排序,求第 \(k\) 小的是多少. 输入格式 第一行两个数\(n\),$ k\(,表示数组的长度和\)k$: ...

  4. 金题大战Vol.0 B、序列

    金题大战Vol.0 B.序列 题目描述 给定两个长度为 \(n\) 的序列\(a\), \(b\). 你需要选择一个区间\([l,r]\),使得\(a_l+-+a_r>=0\)且\(b_l+-+ ...

  5. 土题大战Vol.0 A. 笨小猴 思维好题

    土题大战Vol.0 A. 笨小猴 思维好题 题目描述 驴蛋蛋有 \(2n + 1\) 张 \(4\) 星武器卡片,每张卡片上都有两个数字,第 \(i\) 张卡片上的两个数字分别是 \(A_i\) 与 ...

  6. 水题大战Vol.3 B. DP搬运工2

    水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...

  7. [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解

    前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...

  8. [火星补锅] 水题大战Vol.2 T1 && luogu P1904 天际线 题解 (线段树)

    前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以 ...

  9. [Hdu-5155] Harry And Magic Box[思维题+容斥,计数Dp]

    Online Judge:Hdu5155 Label:思维题+容斥,计数Dp 题面: 题目描述 给定一个大小为\(N*M\)的神奇盒子,里面每行每列都至少有一个钻石,问可行的排列方案数.由于答案较大, ...

随机推荐

  1. 前端学习(六):body标签(四)

    进击のpython ***** 前端学习--body标签 关于前面的都是大部分的标签内容 但是就像衣服一样,除了要有,还要放到适当的位置 我们先来看看一下网页的布局: 就可以看出来,网页都是一块一块的 ...

  2. 手写IOC容器

    IOC(控制翻转)是程序设计的一种思想,其本质就是上端对象不能直接依赖于下端对象,要是依赖的话就要通过抽象来依赖.这是什么意思呢?意思就是上端对象如BLL层中,需要调用下端对象的DAL层时不能直接调用 ...

  3. std:ios:sync_with_stdio (false)以及局限性

    如何在输入输出上提高一下效率emmmm #include<iostream> #include<stdio.h> #include<stdlib.h> #inclu ...

  4. Day14_RabbitMQ及数据同步

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  5. Python核心编程(第3版)PDF高清晰完整中文版|网盘链接附提取码下载|

    一.书籍简介<Python核心编程(第3版)>是经典畅销图书<Python核心编程(第二版)>的全新升级版本.<Python核心编程(第3版)>总共分为3部分.第1 ...

  6. Django学习路6_修改数据库为 mysql ,创建mysql及进行迁徙

    在项目的 settings 中修改 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os. ...

  7. PHP strchr() 函数

    实例 查找 "world" 在 "Hello world!" 中的第一次出现,并返回字符串的其余部分: <?php高佣联盟 www.cgewang.com ...

  8. Ubuntu安装Cloudera Manager以及CDH5.15.2

    一.机子分配 注意,本安装教程是在真机上进行,而非虚拟机.另,此次搭建主要的目的是搭建测试环境,让Hadoop各组件能够运作起来即可,完成搭建后,将用小数据量进行相关数据的计算与测试.线上环境将会使用 ...

  9. loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化

    LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...

  10. dp的本质

    什么是真正的dp?有什么特点?怎么来搞. 最近遇到了一些以前的题目发现没有好好的理解就直接写了 大多都是书上的算法并不是自己真正的理解. 1 关于背包 我总结一下 可能 有助于对模型的更快发现 01 ...