bzoj4321: queue2

来源:互联网 发布:网络分层的理解 编辑:程序博客网 时间:2024/06/07 15:27

链接

  http://www.lydsy.com/JudgeOnline/problem.php?id=4321

题解

  f[i][j][0/1]表示前i个人排了队,有j对不合法的,ii1是否相邻的方案数。
  转移见程序。

代码

//动态规划#include <cstdio>#include <algorithm>#define maxn 1100#define mod 7777777#define ll long longusing namespace std;ll F[maxn][maxn][3], N;inline void u(ll x, ll &y){y=(y+x)%mod;}int main(){    ll i, (*f)[3], (*g)[3], j;    scanf("%lld",&N);    F[1][0][0]=1;    for(i=1;i<N;i++)for(j=0;j<i;j++)    {        f=F[i], g=F[i+1];        u(f[j][0]*j,g[j-1][0]);        u(f[j][0]*2,g[j+1][1]);        u(f[j][0]*(i-j-1),g[j][0]);        u(f[j][1]*(j-1),g[j-1][0]);        u(f[j][1]*(i-j),g[j][0]);        u(f[j][1],g[j][1]);        u(f[j][1],g[j+1][1]);    }    printf("%lld",F[N][0][0]);    return 0;}
0 0
原创粉丝点击