题目描述

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

输入

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

输出

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

样例输入

4

样例输出

2


题解

dp

老套路了,考虑把数从小到大插入的过程进行dp。

设 $f[i][j]$ 表示 $1\sim i$ 的排列,有 $j$ 组相邻的相差1,且 $i$ 和 $i-1$ 不相邻的方案数;
设 $g[i][j]$ 表示 $1\sim i$ 的排列,有 $j$ 组相邻的相差1,且 $i$ 和 $i-1$ 相邻的方案数。

那么考虑插入 $i+1$ 的位置,有:不破坏空位且不与 $i$ 相邻、不破坏空位且与 $i$ 相邻、破坏空位且不与 $i$ 相邻、破坏空位且与 $i$ 相邻(只发生在 $g$ 的转移)4种。分别推一下方案数即可。

最后的答案就是 $f[n][0]$ 。

时间复杂度 $O(n^2)$ 。

另外把前几项丢到oeis上可以得到线性递推式 $a_n=(n+1)a_{n-1}-(n-2)a_{n-2}-(n-5)a_{n-3}+(n-3)a_{n-4}$ ,就能 $O(n)$ 求解了,感觉像是某容斥然而并不能推出来...

#include <cstdio>
#define mod 7777777
long long f[1010][1010] , g[1010][1010];
int main()
{
int n , i , j;
scanf("%d" , &n);
f[1][0] = 1;
for(i = 1 ; i < n ; i ++ )
{
for(j = 0 ; j < i ; j ++ )
{
f[i + 1][j] = (f[i + 1][j] + f[i][j] * (i - j - 1)) % mod;
g[i + 1][j + 1] = (g[i + 1][j + 1] + f[i][j] * 2) % mod;
if(j) f[i + 1][j - 1] = (f[i + 1][j - 1] + f[i][j] * j) % mod;
f[i + 1][j] = (f[i + 1][j] + g[i][j] * (i - j)) % mod;
g[i + 1][j + 1] = (g[i + 1][j + 1] + g[i][j]) % mod;
if(j) f[i + 1][j - 1] = (f[i + 1][j - 1] + g[i][j] * (j - 1)) % mod;
g[i + 1][j] = (g[i + 1][j] + g[i][j]) % mod;
}
}
printf("%lld\n" , f[n][0]);
return 0;
}

最新文章

  1. mysql 在row模式下truncate 与 delete 二进制日志记录的差异
  2. 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装
  3. android相机调用及存储详解
  4. Oracle字符集设置
  5. Windows Store App 应用程序存储空间
  6. sqlserver获取表名,字段名
  7. [JAVA][RCP] Eclipse4/RCP/Lifecycle
  8. H-JATG:NAND_FLASH的参数设置
  9. WPF checkbox文字下掉
  10. Java数字签名——RSA算法
  11. Install PIL with Jpeg support on Ubuntu Oneiric 64bit
  12. springboot~yml里的自定义配置
  13. js驗證網址URL格式
  14. ERROR in Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (64)
  15. [UnityShader基础]05.模板测试
  16. ABP框架系列之四十六:(Setting-Management-设置管理)
  17. java中常用的加密方式
  18. Spring格式化注解
  19. poj 3013 最短路变形
  20. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

热门文章

  1. 2016-2017-2 20155322 实验四 Android 开发基础
  2. 20155330 实验三 敏捷开发与XP实践
  3. sql语句-2-字符串数字日期时间
  4. 【BZOJ3110】【LG3332】[ZJOI2013]K大数查询
  5. bzoj4998 星球联盟
  6. 日志采集框架 Flume
  7. javaweb(三十八)——事务
  8. Python接口测试实战5(下) - RESTful、Web Service及Mock Server
  9. Linux系统网络安装——基于pxe+dhcp+nfs+tftp+kickstart
  10. 【python 3.6】笨办法取出列表中的字典的value