4321: queue2

Description

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

Input

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

Output

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

Sample Input

4

Sample Output

2
样例解释:有两种方案 2 4 1 3 和 3 1 4 2

  这道题还真没想到是DP。
  去年NOIP考前看到此题,当时竟不知DP,只会暴力。至此便叹息痛恨焉。
  昨夜又见,虽欣喜,然不知何为。
  直到我看见:【bzoj4321】queue2
  啊啊啊啊啊!这篇博客已经讲得很详细了。这n个沙茶可以一个一个插入。
  状态表示:f[i][j][0..1]=前i个沙茶有j对是相邻的,其中第i个沙茶和第i-1个沙茶相不相邻
  初始状态:f[1][0][0]=1
  状态转移:
  f[i][j][1]<-f[i-1][j][1] 第i个沙茶插在了第i-1个和第i-2个之间
                    <-f[i-1][j-1][1] 第i个沙茶插在了第i-1个旁边,第i-2个的另一侧
                    <-f[i-1][j-1][0]*2 第i个沙茶插在了第i-1个的左右两侧(第i-1个不与第i-2个相邻)
  f[i][j][0]<-f[i-1][j+1][1]*j 第i个沙茶落了单,干坏事。可以拆散j对,因为不能拆散第i-1个和第i-2个
                    <-f[i-1][j+1][0]*(j+1) 第i个沙茶落了单,干坏事。可以拆散j+1对
                    <-f[i-1][j][1]*(i-j-1) 第i个沙茶落了单,兀自玩去了。(i-1+1)-(j+1),不能拆散j对也不能在第i-1个旁边
                    <-f[i-1][j][0]*(i-j-2) 第i个沙茶落了单,兀自玩去了。(i-1+1)-(j+2),不能拆散j对也不能在第i-1个旁边
  答案输出:ans=f[n][0][0]
  可用滚动数组。时间O(n^2),空间O(n)。
  不过还有递推式:http://oeis.org/A002464 f[n]=(n+1)f[n−1]−(n−2)f[n−2]−(n−5)f[n−3]+(n−3)f[n−4]
  此题转移中分类讨论很有意思,是一道很好的题。注意不要爆int。
 /**************************************************************
Problem: 4321
User: Doggu
Language: C++
Result: Accepted
Time:484 ms
Memory:852 kb
****************************************************************/ #include <cstdio>
long long n, f[][][], cur, MOD=;
inline void add(long long &a,long long b) {if(b>MOD) b%=MOD;a=a+b>MOD?a+b-MOD:a+b;}
int main() {
scanf("%d",&n);
f[cur][][]=;
for( int i = ; i <= n; i++ ) {
cur^=;
for( int j = ; j <= i-; j++ ) {
f[cur][j][]=f[cur^][j][];
if(j) add(f[cur][j][],f[cur^][j-][]);
if(j) add(f[cur][j][],f[cur^][j-][]*);
f[cur][j][]=f[cur^][j+][]*j;
add(f[cur][j][],f[cur^][j+][]*(j+));
add(f[cur][j][],f[cur^][j][]*(i-j-));
add(f[cur][j][],f[cur^][j][]*(i-j-));
}
}
printf("%d\n",f[cur][][]);
return ;
}

DP

 

最新文章

  1. Python 下的unittest测试框架
  2. MySQL--使用xtrabackup进行备份还原
  3. 搭建hadoop1.2集群
  4. HTML5预学习 长期更新
  5. iOS,Objective-C,相册功能的实现。
  6. react 年-月-日 时:分:秒
  7. Lambert漫反射.BLinnPhong及Phong模型 Unity自带的在Lighting.cginc里
  8. C# 字符串转义和反转义
  9. django开发的社区和博客
  10. 深度优先搜索 codevs 1031 质数环
  11. JAVA 对象初始化的过程
  12. 项目开发笔记-传单下发 名片替换 文件复制上传/html静态内容替换/json解析/html解析
  13. bat加载和分离VHD
  14. C# 查找指定名称的控件(转)
  15. 解决sdk manager无法更新的问题
  16. kali高速更新源以及主题修改方法
  17. [1] MVC &amp; MVP &amp;MVVM
  18. 让你成功安装vscode中go的相关插件
  19. 浅谈SQL Server内部运行机制
  20. Session兑现的一级缓存

热门文章

  1. 国密算法--Openssl 实现国密算法(基础介绍和产生秘钥对)
  2. 使用SSD目标检测c++接口编译问题解决记录
  3. [BUAA软工]第0次个人作业
  4. mysql 官方集群
  5. win10系统下载-靠谱推荐
  6. web11 Struts处理表单数据
  7. wdatepicker控件de使用小方法汇总
  8. 150314 解决老师给二柱子出的问题 之 ver1.0
  9. HDU 4568 Hunter 最短路+TSP
  10. iOS日期的加减