AGC030F - Permutation and Minimum
https://atcoder.jp/contests/agc030/tasks/agc030_f
题解
我们先把这个排列从\(1 \sim 2n\)表达出来,然后题面中的每一对数我们可以用一条线把他们连起来,那么在序列中表达出的值是这条线的左端点。
如果一开始每个数都没有限制的话,我们则需要求有哪些数会成为左端点,这个其实就是卡特兰数,求答案的话还需要求一个阶乘。
现在有一些位置有了限制,我们就把有限制的位置成为特殊位置。
还是从\(1\sim 2n\)这个序列上考虑,因为我们的贡献是在左端点产生,所以我们设\(dp[i][j][k]\)表示做到\(i\),有\(j\)个普通点没有被匹配,有\(k\)个特殊点没有被匹配。
普通点可以任意匹配,特殊点只能匹配普通点。
如果普通点匹配了特殊点,那么它的位置已经确定了,所以最后我们要乘上普通配普通的对数的阶乘。
代码
#include<bits/stdc++.h>
#define N 602
using namespace std;
typedef long long ll;
int n,now,a[N],sm;
int tag[N];
ll jie[N],dp[2][302][302];
const int mod=1e9+7;
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
int main(){
n=rd();
sm=n*2;
int cnt=0;
for(int i=1;i<=sm;++i){
a[i]=rd();
if(a[i]!=-1)tag[a[i]]=1;
if(i%2==0&&a[i]!=-1&&a[i-1]!=-1){
tag[a[i]]=-1;
tag[a[i-1]]=-1;
}
if(i%2==0&&a[i]==-1&&a[i-1]==-1)cnt++;
}
jie[0]=1;
for(int i=1;i<=sm;++i)jie[i]=jie[i-1]*i%mod;
dp[1][0][0]=1;
int now=1,pre=0;
for(int i=sm;i>=1;--i)if(tag[i]!=-1){
swap(now,pre);
memset(dp[now],0,sizeof(dp[now]));
for(int j=0;j<=n;++j)
for(int k=0;j+k<=n;++k)if(dp[pre][j][k]){
if(tag[i]){
MOD(dp[now][j][k+1]+=dp[pre][j][k]);
if(j)MOD(dp[now][j-1][k]+=dp[pre][j][k]);
}
else{
MOD(dp[now][j+1][k]+=dp[pre][j][k]);
if(j)MOD(dp[now][j-1][k]+=dp[pre][j][k]);
if(k)MOD(dp[now][j][k-1]+=dp[pre][j][k]*k%mod);
}
}
}
printf("%lld",dp[now][0][0]*jie[cnt]%mod);
return 0;
}
AGC030F - Permutation and Minimum的更多相关文章
- 【agc030f】Permutation and Minimum(动态规划)
[agc030f]Permutation and Minimum(动态规划) 题面 atcoder 给定一个长度为\(2n\)的残缺的排列\(A\),定义\(b_i=min\{A_{2i-1},A_{ ...
- 【AGC030F】Permutation and Minimum DP
题目大意 有一个长度为序列 \(a\),其中某些位置的值是 \(-1\). 你要把 \(a\) 补成一个排列. 定义 \(b_i=\min(a_{2i-1},a_{2i})\),求有多少种可能的 \( ...
- 【AGC030F】Permutation and Minimum(DP)
题目链接 题解 首先可以想到分组后,去掉两边都填了数的组. 然后就会剩下\((-1,-1)\)和\((-1,x)\)或\((x,-1)\)这两种情况 因为是最小值序列的情况数,我们可以考虑从大到小填数 ...
- AtCoder Grand Contest 030 (AGC030) F - Permutation and Minimum 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/AGC030F.html 草率题解 对于每两个相邻位置,把他们拿出来. 如果这两个相邻位置都有确定的值,那么不管他. 然后把所有的 ...
- Atcoder Grand Contest 030 F - Permutation and Minimum(DP)
洛谷题面传送门 & Atcoder 题面传送门 12 天以前做的题了,到现在才补/yun 做了一晚上+一早上终于 AC 了,写篇题解纪念一下 首先考虑如果全是 \(-1\) 怎么处理.由于我 ...
- AtCoder Grand Contest 030题解
第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之 ...
- AGC030 简要题解
A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继 ...
- 【AtCoder】AGC030
A - Poisonous Cookies 有毒还吃,有毒吧 #include <bits/stdc++.h> #define fi first #define se second #de ...
- [LeetCode] Minimum Window Substring 最小窗口子串
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
随机推荐
- index.html(xpath素材)
<bookstore> <title>新华书店</title> <book href="http://www.langlang2017.com/&q ...
- 关于E980
1. 浪商官网上面的内容貌似有点问题 来源: https://www.inspurpower.com/product/others.php?f=E980 但是wiki 里面的东西: 其实只有12cor ...
- laravel5.5结合bootstrap上传插件fileinput 上传图片
引入相关js <script src="{{ asset('bootstrap-fileinput/js/fileinput.js') }}"></script& ...
- linux系统管理基础知识
1.linux的安装配置 虚拟机安装 Linux安装和分区 IP地址的配置 ifup eth0,ifdoen eth0 关闭不常用的程序 关闭selinux 远程登录(多用户,多任务) 用户和角色划分 ...
- 使用electron实现百度网盘悬浮窗口功能!
相关依赖 里面使用了vuex vue vue-route storeJs storeJs 用来持久化vuex状态 展示 介绍说明 没有使用electron内置的-webkit-app-region: ...
- C/C++ 递归
递归 当一个函数调用它自己来定义时称它为递归函数.(什么叫它自己调用它自己呢?) 1.1.引出递归 从一个简单的问题考虑递归,求0,1,2, 3,4,5......n的和. 首先定义一个求和公式:su ...
- class path resource [applicationContext.xml] cannot be opened because it does not exis
使用maven创建web工程,将spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- Linux学习--第三天--linux文件目录、ls、mkdir、mv、rm、touch、cat、tac、more、less、head、tail、ln、chmod、chown、chgrp、umask
文件目录 目录名 备注 bin 下面的命令所有人都可以运行 sbin 只有root才能运行,s代表super /mnt,/media,/misc 都是挂载目录,但一般只用mnt /opt 第三方软件安 ...
- 源讯科技(中国)有限公司(Atos Worldline)
源讯公司是欧洲***的IT服务公司,去年营收达到88亿欧元,在全球52个国家拥有77100名员工.Worldline为Atos(源讯)全资子公司,专注于金融支付领域.Worldline在B2B及B2C ...
- [转]0day零距离
前言: 想起这个话题,还要从早年网上的一则新闻说起--"美国联邦官员于2001年12月11日宣布,已破获一起以因特网为犯罪手段的特大软件盗版案--盗版软件的总价值至少高达10亿美元.据悉,该 ...