BZOJ4321: queue2
题面
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的更多相关文章
- BZOJ4321 queue2(动态规划)
考虑套路地将1~n依次加入排列.设f[i][j]为已将1~i加入排列,有j对不合法的方案数.加入i+1时可能减少一对不合法的,可能不变,可能增加一对,对于i+1与i的关系再增设0/1/2状态表示i与左 ...
- BZOJ4321:queue2(DP)
Description n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行.现在想知道,存在多少方案满足沙茶们如此不苛刻 ...
- bzoj4321: queue2(DP)
woc万能的OEIS大法!这题居然是有递推式的QAQ http://oeis.org/A002464 这题的状态想不出来T^T... f[i][j][0/1]表示前i个编号,有j对相邻的编号位置上相邻 ...
- #6【bzoj4321】queue2 dp
题目描述 n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行: 现在想知道,存在多少方案满足沙茶们如此不苛刻的条件. ...
- 【bzoj4321】queue2 dp
题目描述 n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行: 现在想知道,存在多少方案满足沙茶们如此不苛刻的条件. ...
- BZOJ 4321 queue2
4321: queue2 Description n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行: 现在想知道,存在 ...
- BZOJ 4321: queue2( dp )
dp(i, j, 1)表示前i个, 有j对是不合法的, i和i-1是在一起的. dp(i, j, 0)表示前i个, 有j对是不合法的, i和i-1不在一起的. 转移我们只需考虑是多了一对不合法的还是少 ...
- bzoj4321
queue2 HYSBZ - 4321 n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两 人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行: 现在想知道,存在多少方 ...
- B4321 queue2 dp
这个题的dp真的恶心.首先,一开始我以为是一道数论题,但是组合数和这个题没啥关系.dp方程巨麻烦,状态是dp[i][j][0/1],代表i位连了j个,上一位是否连着.然后开始转移,证明如下: 我们先来 ...
随机推荐
- [Python Study Notes]计算cpu使用率
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- shell实现go环境的部署搭建
##############################Deploy go enviroment######################## echo "start deploy g ...
- Ubuntu Linux 与 Windows 7双系统安装教程(图文)
前期准备: 1. 备份你的重要数据到其他设备上,以防不测2. 准备linux镜像.可以到ubuntu官网下载iso格式的文件.(注意:如果你是双显卡,不要随便下.amd的双显卡请选择含有"a ...
- cookie session区别
先理解为什么出现cookie和session: 为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,我们需要一种强有力的解决方案,这样就产生了会话控制. 会话控制思想就是 ...
- Log4j2配置文件详解
目录[-] 1 系列目录 2 默认配置 3 第一个配置例子 4 复杂一点的配置 4.1 Appender之Syslog配置 4.2 Syslog及Syslog-ng相关配置(Fedora) 5 Log ...
- Qt 如何使用 lambda 表达式连接信号和槽?
connect(camera, static_cast<void(QCamera::*)(QCamera::LockStatus, QCamera::LockChangeReason)>( ...
- static_cast, dynamic_cast, const_cast 类型转换如何使用?
static_cast 用法:static_cast < type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检 ...
- BZOJ3224/洛谷P3391 - 普通平衡树(Splay)
BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...
- .net Winfrom 僵尸窗口 的问题
执行顺序如下: Form1 form1 =new Form1(); form1.ShowDialog(); Form2 form2= Application.OpenForms["Form2 ...
- PV和UV的简单记录
1.什么是PV值 PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多少次.PV ...