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个,上一位是否连着.然后开始转移,证明如下: 我们先来 ...
随机推荐
- SpringBoot入门Demo
前言:相信做java后台编程的童鞋都知道Spring家族,Spring作为我们项目中必备的框架.JavaSpringBoot号称javaEE的颠覆者,这引起了本Y的好奇,这才花费了一点时间,学习了下s ...
- javac编译乱码
PersonTest.java:1: 错误: 非法字符: \65279 解决途径如下 用记事本打开java源文件,另存为ANSI格式 如果java文件包含中文字符,使用-encoding gbk格式进 ...
- ansible实践4- 管理配置文件
生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下.下面我们来写个管理nginx配置文件的playbook mkdir -p /etc/ansible/nginx_c ...
- dedecms在任意页面调用任意栏目文章
dedecms在任意页面调用任意栏目文章,我们用arclist标签即可实现.如果是调用多个栏目文章可以给typeid多个值. 我们以调用ID为1和ID为30的两个栏目下5篇文章为例: {dede:ar ...
- [原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记08
day8课程内容: 文件操作 f=open('小重山','r',encoding='utf8') #以读的方式打开文件 data=f.read() print(data) f.close() # ...
- 流处理与消息队列------《Designing Data-Intensive Applications》读书笔记16
上一篇聊了聊批处理的缺点,对于无界数据来说,流处理会是更好的选择,"流"指的是随着时间的推移逐步增加的数据.消息队列可以将这些流组织起来,快速的在应用程序中给予反馈.但是消息队列与 ...
- WPF将RGB转为HSL的工具类
class HSLColor { private int _alpha = 255; public int _hue = 0; public d ...
- 关于chrom开发者工具priview和respons 数据内容不一致问题
在昨天晚上2017年8月24日,深夜升级的时候发现你了一个问题:简单的把问题描述一下:新增的一个付款单中的金额为最大值9999999999999999 ,但是保存后返回来的却是100000000000 ...
- js获取当前浏览器地址栏的链接,然后在链接后面加参数
比如访问www.baidu.com,url显示成www.baidu.com/?form <script type="text/javascript"> if(locat ...