dp(i, j, 1)表示前i个, 有j对是不合法的, i和i-1是在一起的.

dp(i, j, 0)表示前i个, 有j对是不合法的, i和i-1不在一起的.

转移我们只需考虑是多了一对不合法的还是少了一对不合法的, 或者是不变, 考虑当前i和i-1,i-2的位置的影响就可以了.

dp(i, j, 1) = 2*dp(i-1, j-1, 0) + dp(i-1, j-1, 1) + dp(i-1, j, 1)

dp(i, j, 0) = (i-j-2)*dp(i-1, j, 0) + (j+1)*dp(i-1, j+1, 0) + (i-j-1)*dp(i-1,j,1) + j*dp(i-1, j+1, 1)

这道题貌似还有递推式....

---------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 1009;
const int MOD = 7777777;
 
int dp[2][maxn][2], N;
 
inline void upd(int &x, int t) {
if((x += t) >= MOD)
x -= MOD;
}
 
int main() {
scanf("%d", &N);
int c = 0, p = 1;
memset(dp[c], 0, sizeof dp[c]);
dp[c][0][0] = 1;
for(int i = 2; i <= N; i++) {
swap(c, p);
memset(dp[c], 0, sizeof dp[c]);
for(int j = 0; j < i; j++) {
dp[c][j][1] = dp[p][j][1];
if(j) {
upd(dp[c][j][1], dp[p][j - 1][0]);
upd(dp[c][j][1], dp[p][j - 1][0]);
upd(dp[c][j][1], dp[p][j - 1][1]);
}
dp[c][j][0] = (ll(dp[p][j + 1][0]) * (j + 1) + ll(j) * dp[p][j + 1][1]) % MOD;
if(i >= j + 2)
upd(dp[c][j][0], (ll(dp[p][j][0]) * (i - j - 2) + ll(dp[p][j][1]) * (i - j - 1)) % MOD);
}
}
printf("%d\n", dp[c][0][0]);
return 0;
}

---------------------------------------------------------------------------------

4321: queue2

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 104  Solved: 54
[Submit][Status][Discuss]

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

HINT

Source

BZOJ 4321: queue2( dp )的更多相关文章

  1. BZOJ 4321 queue2

    4321: queue2 Description n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行: 现在想知道,存在 ...

  2. BZOJ 4321 DP

    思路: 这个DP太神了- 完全没想到 http://blog.csdn.net/geotcbrl/article/details/49663401 //By SiriusRen #include &l ...

  3. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

  4. BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)

    BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...

  5. BZOJ 1040 树形DP+环套树

    就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...

  6. bzoj 3851: 2048 dp优化

    3851: 2048 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 9[Submit][Status] Description T ...

  7. BZOJ 1068 (区间DP)

    题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...

  8. BZOJ 3156: 防御准备( dp + 斜率优化 )

    dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...

  9. BZOJ.4361.isn(DP 树状数组 容斥)

    题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...

随机推荐

  1. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  2. HDU 3698 DP+线段树

    给出N*M矩阵.每一个点建立灯塔有花费.每一个点的灯塔有连接范围,求每一行都建立一个灯塔的最小花费,要求每相邻两行的灯塔能够互相连接.满足 |j-k|≤f(i,j)+f(i+1,k) DP思路,dp[ ...

  3. JS继承,原型继承,构造函数的继承,非构造函数"的继承

    a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...

  4. JavaScript、JSP、Java及javaEE

    对JavaScript.JSP.Java及javaEE之间区别的理解 JavaScript和Java名字极为类似,相信不少的初学者或者准备学这些知识的人对于JavaScript.JSP.Java及Ja ...

  5. C++学习笔录3

    1.隐藏:存在于派生类和基类中.只要成员名字相同就叫做隐藏.参数和函数名都相同时,是一种特殊的隐藏,叫做重写,重写只出现在函数中.若需要访问基类中被隐藏的成员,必须访问这种方法:“对象名:类名::隐藏 ...

  6. QF——关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系

    强引用和弱引用: 我们已经知道OC中的内存管理是通过“引用计数器”来实现的.一个对象的生命周期取决于它是否还被其他对象引用(是否retainCount=0).但在有些情况下,我们并不希望对象的销毁时间 ...

  7. OC语法8——@class关键字

    @class关键字: 在当前类中若要引用其他类的对象作成员变量(Book  *book),我们以前采用的方式是 #import "Book.h" 但 #import "B ...

  8. Android textview 设置不同的字体大小和颜色

    在实际应用中,需要将一个字符串已不同的颜色,字体显示出来.当然完全可以通过不同textview拼接出来.也可以通过一个textview来展示. 步骤如下: 1.定义不同style . 不妨如下定义2个 ...

  9. Viewing the Raw SQL Statement(xcode で)

    Thanks to Core Data. Even without learning SQL and database, you’re able to perform create, select, ...

  10. php中禁止非法调用和硬路径引入文件的方法

    php中禁止非法调用和硬路径引入文件的方法 在php中有一些公共的文件为了方便,我们会做一个公共文件,让不用的文件共同调用.为了禁止公共文件被非常单独调用,可以在文件上做一个常量,禁止非常调用:在公共 ...