码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ4321: queue2

时间:2018-01-27 11:26:45      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:body   ++   input   个人   type   bzoj   href   reg   mem   

题面

传送门

Sol

先设一个套路的状态:\(f[i][j]\)表示到第\(i\)个人,有\(j\)对冲突
但是我们不能确定\(i-1\),所以不好决策i的位置
所以再加一维\(0/1\)\(f[0/1][i][j]\)表示\(i\)\(i-1\)是否有冲突
每枚举一个人,我们就要把它插入到之前的队列中
转移:
\(f[0][i][j]\)

乘上\(j\),转移给\(f[0][i+1][j-1]\),表示消除一个冲突
乘上\(i+1-j-2\),转移给\(f[0][i+1][j]\),表示不消除冲突,并且在剩下的\(i+1-j\)选一个不与\(i\)相邻的位置插入\(i+1\),所以减去\(2\)
乘上\(2\):转移给\(f[1][i+1][j+1]\),即选一个与\(i\)相邻的位置插入\(i+1\)

\(f[1][i][j]\):类似,四种情况自己\(yy\)去吧

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int Zsy(7777777);

IL ll Input(){
    RG ll x = 0, z = 1; RG char c = getchar();
    for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
    for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
    return x * z;
}

int n, f[2][1005][1005];

IL void Up(RG int &x, RG int y){
    x += y;
    if(x >= Zsy) x -= Zsy;
}

int main(RG int argc, RG char* argv[]){
    n = Input();
    f[0][1][0] = 1;
    for(RG int i = 1; i < n; ++i)
        for(RG int j = 0; j < i; ++j){
            if(f[0][i][j]){
                if(j) Up(f[0][i + 1][j - 1], 1LL * f[0][i][j] * j % Zsy);
                if(i - j - 1 > 0) Up(f[0][i + 1][j], 1LL * f[0][i][j] * (i - j - 1) % Zsy);
                Up(f[1][i + 1][j + 1], 1LL * f[0][i][j] * 2 % Zsy);
            }
            if(f[1][i][j]){
                Up(f[1][i + 1][j], f[1][i][j]);
                Up(f[1][i + 1][j + 1], f[1][i][j]);
                if(j > 1) Up(f[0][i + 1][j - 1], 1LL * f[1][i][j] * (j - 1) % Zsy);
                if(i - j > 0) Up(f[0][i + 1][j], 1LL * f[1][i][j] * (i - j) % Zsy);
            }
        }
    printf("%d\n", f[0][n][0]);
    return 0;
}

BZOJ4321: queue2

标签:body   ++   input   个人   type   bzoj   href   reg   mem   

原文地址:https://www.cnblogs.com/cjoieryl/p/8364833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!