[DP] BZOJ4321. queue2

来源:互联网 发布:深圳网络代运营公司 编辑:程序博客网 时间:2024/06/06 03:22

fi,j,k 表示由前 i 个人组成,有 j 对人是相邻的,ii1 是否相邻

DP的话直接分类讨论转移就行了

#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>using namespace std;const int N=1010,P=7777777;int n;int f[N][N][2];inline void add(int &x,int y){    (x+=y)%=P;}int main(){    scanf("%d",&n);    if(n==1) return puts("1"),0;    if(n==2) return puts("0"),0;    f[2][1][1]=2;    for(int i=2;i<n;i++)        for(int j=0;j<i;j++){            add(f[i+1][j+1][1],2*f[i][j][0]+f[i][j][1]);            add(f[i+1][j][1],f[i][j][1]);            add(f[i+1][j][0],1LL*f[i][j][1]*(i-j)%P);            add(f[i+1][j][0],1LL*f[i][j][0]*(i-j-1)%P);            if(j) add(f[i+1][j-1][0],1LL*f[i][j][0]*j%P+1LL*f[i][j][1]*(j-1)%P);        }    printf("%d\n",f[n][0][0]);    return 0;}