题目描述

n 个沙茶,被编号 1~n。排完队之后,每个沙茶希望,自己的相邻的两
人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行; 
现在想知道,存在多少方案满足沙茶们如此不苛刻的条件。 

输入

只有一行且为用空格隔开的一个正整数 N,其中 100%的数据满足 1≤N ≤ 1000; 

输出

一个非负整数,表示方案数对 7777777 取模。   

样例输入

4

样例输出

2
样例解释:有两种方案 2 4 1 3 和 3 1 4 2
 
递推方法比较高深,据说与容斥有关:$f_{i}=(i+1)f_{i-1}-(i-2)f_{i-2}-(i-5)f_{i-3}+(i-3)f_{i-4}$
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 7777777
using namespace std;
int n;
ll f[1010];
int main()
{
scanf("%d",&n);
f[0]=f[1]=1ll;
f[2]=f[3]=0ll;
for(int i=4;i<=n;i++)
{
f[i]=1ll*f[i-1]*(i+1)%mod-1ll*f[i-2]*(i-2)%mod-1ll*f[i-3]*(i-5)%mod+1ll*f[i-4]*(i-3)%mod;
f[i]=(f[i]%mod+mod)%mod;
}
printf("%lld",f[n]);
}

$DP$做法:考虑对于前$i$个数的排列,当加入$i+1$时对排列的影响,设$f[i][j]/g[i][j]$分别表示前$i$个数的排列中有$j$对相差为$1$的数相邻(后文称为不合法数对)且$i$两边有/没有与它相差为1的的数。

考虑这两个方程如何转移,对于$f[i][j]$,加入$i+1$:

1、与$i$相邻且增加一对不合法数对,有一种放法,可转移到$f[i+1][j+1]$

2、与$i$相邻且不合法数对数不变,有一种放法,可转移到$f[i+1][j]$

3、与$i$不相邻且减少一对不合法数对,有$(j-1)$种放法,可转移到$g[i+1][j-1]$

4、与$i$不相邻且不合法数对数不变,有$(i-j)$种放法,可转移到$g[i+1][j]$

对于$g[i][j]$,加入$i+1$:

1、与$i$相邻且增加一对不合法数对,有两种放法,可转移到$f[i+1][j+1]$

2、与$i$不相邻且减少一对不合法数对,有$j$种放法,可转移到$g[i+1][j-1]$

3、与$i$不相邻且不合法数对数不变,有$(i-j-1)$种放法,可转移到$g[i+1][j]$

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 7777777
using namespace std;
int n;
ll f[1010][1010];
ll g[1010][1010];
int main()
{
scanf("%d",&n);
g[1][0]=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
(f[i+1][j+1]+=f[i][j])%=mod;
(f[i+1][j]+=f[i][j])%=mod;
(g[i+1][j-1]+=1ll*(j-1)*f[i][j])%=mod;
(g[i+1][j]+=1ll*(i-j)*f[i][j])%=mod;
(f[i+1][j+1]+=2*g[i][j])%=mod;
(g[i+1][j-1]+=1ll*j*g[i][j])%=mod;
(g[i+1][j]+=1ll*(i-j-1)*g[i][j])%=mod;
}
}
printf("%lld",g[n][0]);
}

BZOJ4321queue2——DP/递推的更多相关文章

  1. hdu2089(数位DP 递推形式)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. hdu 2604 Queuing(dp递推)

    昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...

  3. Power oj2498/DP/递推

    power oj 2498 /递推 2498: 新年礼物 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 12 Accepted: 3  ...

  4. Shell Necklace (dp递推改cdq分治 + fft)

    首先读出题意,然后发现这是一道DP,我们可以获得递推式为 然后就知道,不行啊,时间复杂度为O(n2),然后又可以根据递推式看出这里面可以拆解成多项式乘法,但是即使用了fft,我们还需要做n次多项式乘法 ...

  5. hdu 1723 DP/递推

    题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...

  6. UVA 10559 Blocks(区间DP&&递推)

    题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l ...

  7. [NOI2009]管道取珠 DP + 递推

    ---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...

  8. HDU 2154 跳舞毯 | DP | 递推 | 规律

    Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...

  9. HDU 5366 dp 递推

    The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...

随机推荐

  1. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  2. [故障公告]阿里云“华东1地域部分负载均衡https访问异常“引起部分站点无法访问

    今天上午 9:40 - 11:06 左右,由于阿里云“华东1地域部分负载均衡https访问异常”,造成我们的部分站点(尤其是博客后台)无法正常访问,给您带来了很大的麻烦,请您谅解. 现已恢复正常,如果 ...

  3. c++入门之浅入浅出类——分享给很多想形象理解的人

    引入类之前,首先引入一个古老的话题:类别,比如int ,char ,double:这些基本的类型方便了我们描述数据(请注意,这句话很重要),类型的存在就是为了方便我们描述数据的.而c++中的类其实作用 ...

  4. iOS开发之线程组解决请求多个接口数据,完成后,再刷新界面

    1.多任务请求接口,完成后,在刷新数据,常用方法 2018年07月18日 16:34:38 hbblzjy 阅读数:1382 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  5. 打开指定测试App的指定Activity

    那究竟应该如何让appium去自动找到指定的APP和指定的Activity呢?想要打开指定的App,需要知道App的包名,同样想要打开指定Activity也需要知道其名,如何获取? 1.问公司的开发人 ...

  6. Linux awk使用方法~~整理

    目录 awk行处理方式 awk命令格式 命令行格式 脚本格式 命令行格式——基本格式 awk内置变量 awk内置函数 测试数据 awk变量和函数使用实例 逻辑判断式 扩展格式 BEGIN 和 END ...

  7. Jenkins redeploy artifacts

    jenkins redeploy artifacts 按钮 - 开源中国https://www.oschina.net/question/3045293_2247829 Jenkins 构建失败后通过 ...

  8. Ubuntu 12.04 安装socks5代理服务器dante-server

    dante-server是一个很好的socks4/5代理服务器软件. 使用apt-get安装   1 apt-getinstall dante-server 添加一个用户   1 2 useradd ...

  9. CentOS 7 安装配置带用户认证的squid代理服务器

    这里只简述搭建一个带用户认证的普通代理 一.安装 安装过程十分简便,只需要安装一下squid,一条命令搞定 yum install squid rpm -qa | grep squid squid-- ...

  10. Tomcat异常及解决办法——持续更新中

    公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.ap ...