题意:

设 b i = m i n ( a 2 i , a 2 i − 1 ) b_i=min(a_{2i},a_{2i-1}) bi​=min(a2i​,a2i−1​)
先给出 a a a部分,将其补全,问 b b b数列的方案数。

题解:

n越小越难系列
首先将两位都确定得踢掉,然后将剩下的数拿出来,有些位置是确定的,有 c i c_i ci​表示。
那么现在两两配对(不能两个 c i c_i ci​都为1),且只关心较小的那个。
从后往前DP。记 f i , j , k f_{i,j,k} fi,j,k​表示已经处理完了 i i i后面的数,有多少个 j > i , c j = 1 j>i,c_j=1 j>i,cj​=1的数匹配的是 ≤ i ≤i ≤i的数,有多少个 j > i , c j = 0 j>i,c_j=0 j>i,cj​=0的数匹配的是 ≤ i ≤i ≤i的数。
转移分三种情况。
i i i跟前面的配对,直接转移。
i i i跟后面的 j j j配对且 c j = 0 c_j=0 cj​=0,直接转移。
i i i跟后面的 j j j配对且 c j = 1 c_j=1 cj​=1,这里要乘上 j j j的个数,因为 j j j的位置是固定的,跟不同的配对视为不同情况。
因为 b b b的顺序不定,最后还要乘上 c n t ! cnt! cnt!
code:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#define LL long long
using namespace std;
const int mod=1e9+7;
int n,a[610],b[610],cnt=0,num=0,c[610];
int f[610][310][310];
void add(int &a,int b) {a+=b;a-=(a>=mod)?mod:0;}
int main()
{scanf("%d",&n);for(int i=1;i<=2*n;i++) scanf("%d",&a[i]);for(int i=1;i<=2*n;i+=2){if(a[i]!=-1&&a[i+1]!=-1) b[a[i]]=b[a[i+1]]=2;else if(a[i]!=-1) b[a[i]]=1;else if(a[i+1]!=-1) b[a[i+1]]=1;else cnt++;}for(int i=1;i<=2*n;i++){if(b[i]==0) c[++num]=0;if(b[i]==1) c[++num]=1;}f[num][0][0]=1;for(int i=num;i>=1;i--)for(int j=0;j<=min(num,n);j++)for(int k=0;k<=min(num,n);k++)if(c[i]==1){add(f[i-1][j+1][k],f[i][j][k]);if(k) add(f[i-1][j][k-1],f[i][j][k]);}else{add(f[i-1][j][k+1],f[i][j][k]);if(k) add(f[i-1][j][k-1],f[i][j][k]);if(j) add(f[i-1][j-1][k],(LL)f[i][j][k]*j%mod);}int ans=f[0][0][0];for(int i=1;i<=cnt;i++) ans=(LL)ans*i%mod;printf("%d",ans);
}

AtCoder Grand Contest 030F - Permutation and Minimum相关推荐

  1. AtCoder题解——AtCoder Grand Contest 048——A - atcoder < S

    题目相关 题目链接 AtCoder Grand Contest 048 A 题,https://atcoder.jp/contests/agc048/tasks/agc048_a. Problem S ...

  2. 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...

  3. AtCoder Grand Contest 008: Contiguous Repainting(思维)

    Contiguous Repainting 时间限制: 2 Sec  内存限制: 256 MB 提交: 69  解决: 22 [提交][状态][讨论版][命题人:admin] 题目描述 There a ...

  4. AtCoder Grand Contest 017

    AtCoder Grand Contest 017 A - Biscuits 有\(n\)个数,问有多少个集合的数的和模\(2\)余\(P\). 随便\(dp\)一下就好了. #include< ...

  5. AtCoder题解 —— AtCoder Grand Contest 050 —— B - Three Coins —— 动态规划

    题目相关 题目链接 AtCoder Grand Contest 050 B 题,https://atcoder.jp/contests/agc050/tasks/agc050_b. Problem S ...

  6. Atcoder Grand Contest 010 B - Boxes 差分

    B - Boxes 题目连接: http://agc010.contest.atcoder.jp/tasks/agc010_b Description There are N boxes arrang ...

  7. AtCoder Grand Contest 010 D - Decrementing

    题目传送门:https://agc010.contest.atcoder.jp/tasks/agc010_d 题目大意: 有\(n\)个数\(A_i\),它们的\(gcd\)是1,A.B两人轮流操作, ...

  8. AtCoder Grand Contest 021完整题解

    提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...

  9. Atcoder Grand Contest 012 B - Splatter Painting解题报告

    题目:http://agc012.contest.atcoder.jp/tasks/agc012_b 有一个n点m边的图,(不一定联通) 还有q个操作:每次将一个点v及其周围距离<=d的点涂成颜 ...

最新文章

  1. 1.字母异位词分组(LeetCode第49题)
  2. 实用技巧:Excel中的常见问题以及解决方法
  3. 基本的try-cathc-finally异常处理
  4. jQuery 判断所有图片加载完成
  5. Arduino笔记-温度传感器的使用
  6. mysql操作语句(简单笔记)
  7. 开发分布式网络监控分析之前端ajax展现那些事
  8. MySQL(11)-----多表创建及描述表关系(多对多的分析和实现)
  9. struts2框架学习
  10. 自定义系统右键菜单工具-使用说明
  11. 阿里P6、P7、P8、级别需要多少年的工作经验,还是因能力而定?
  12. php 微信统一下单接口,微信公众号支付(二)实现统一下单接口
  13. Android:根据阳历日期获取农历日期
  14. 开源共轴双桨无人机 Tdrone 软硬件全部在 GitHub 开源
  15. FC-AE-ASM节点卡(支持 FC-AE-ASM 协议)
  16. 当我们想要用LinkedIn领英开发客户时,如何设计填写职位头衔?
  17. CentOS6.5安装NVIDIA的显卡驱动
  18. 新概念英语第四册16-30课(转)
  19. 多久变形金刚2拍摄电影
  20. ShardingSphere基本介绍及核心概念

热门文章

  1. centos8安装dm8,动态库加载成功后导致undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b fatal: Could not read
  2. 二叉树的遍历-树-数据结构和算法(Java)
  3. 将文件打包成zip包
  4. SuSE含义以及发音
  5. 2022广西省安全员C证考试试题及答案
  6. 词霸天下---词根258【-fus-=-fut-=-fund-=-found- 熔化;倾倒】
  7. 使用element table表格实现后端排序
  8. 微软什么时候停止对win7进行服务器,微软官方通告:2020年1月24日起停止对windows7的技术支持...
  9. 李成熙:前端如何突破技术与业务的瓶颈
  10. 您的计算机无法访问dota2服务器,win10系统运行dota2提示“无法与任何服务器建立连接”如何解决...