AtCoder4515 [AGC030F] Permutation and Minimum(dp)

problem

洛谷链接

solution

一个 AiA_iAi 只会影响一个 BiB_iBiBiB_iBi 之间的决定因素 AAA 是不会有交的。

所以如果相邻两个对同一个 BiB_iBi 影响的 A2i,A2i−1A_{2i},A_{2i-1}A2i,A2i1 都是确定的,那么 BiB_iBi 也就确定了。

这是不会对方案数产生贡献的,提前预处理掉这些位置,接下来的计算不考虑这些出现的值。

同时,如果都不确定,这些配对位置的值可以互换,即原本 −1-11 的位置是无序的,所以最后的答案要乘上一个阶乘。

BiB_iBi 是取较小值,容易想到从大到小考虑填的数,那么BiB_iBi 就仅由 A2i,A2i−1A_{2i},A_{2i-1}A2i,A2i1 后填的数决定。

下面将 A2i−1,A2iA_{2i-1},A_{2i}A2i1,A2i 没全填的称为“未配对”。

f(i,j,k):f(i,j,k):f(i,j,k): 已考虑到数第 iii 大时,有 jjj 个明确指定的数还未配对,有 kkk 个原本未知 −1-11 然后填了个数也还未配对 的方案数。

考虑由 f(i,j,k)f(i,j,k)f(i,j,k) 转移到 i+1i+1i+1,即 Ai+1A_{i+1}Ai+1 的配对情况。

  • 如果 Ai+1A_{i+1}Ai+1 原本是指定的数,Ai+1≠−1A_{i+1}\neq -1Ai+1=1

    • 可以和未知数配对,f(i,j,k)→f(i+1,j,k−1)f(i,j,k)\rightarrow f(i+1,j,k-1)f(i,j,k)f(i+1,j,k1)
    • 可以新增一个已知数的未配对,f(i,j,k)→f(i,j+1,k)f(i,j,k)\rightarrow f(i,j+1,k)f(i,j,k)f(i,j+1,k)
  • 如果 Ai+1=−1A_{i+1}=-1Ai+1=1,未知。

    • 可以新增一个未知数的未配对,f(i,j,k)→f(i,j,k+1)f(i,j,k)\rightarrow f(i,j,k+1)f(i,j,k)f(i,j,k+1)

    • 可以和未知数配对,f(i,j,k)→f(i+1,j,k−1)f(i,j,k)\rightarrow f(i+1,j,k-1)f(i,j,k)f(i+1,j,k1)

    • 可以和已知数配对,f(i,j,k)×j→f(i+1,j−1,k)f(i,j,k)\times j\rightarrow f(i+1,j-1,k)f(i,j,k)×jf(i+1,j1,k)

      因为已知数的位置是固定的,所以 Ai+1A_{i+1}Ai+1jjj 个已知数配对都是不同的情况。

      而和未知数的配对是不考虑 ×k\times k×k 的。本来位置就不固定,在最后的阶乘时候已经算入了,这里再乘就算重了。

初始状态 f(0,0,0)=1f(0,0,0)=1f(0,0,0)=1

code

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define int long long
#define maxn 605
int n, m, cnt, fac;
int a[maxn], c[maxn], g[maxn];
int f[maxn][maxn][maxn];signed main() {scanf( "%lld", &n ), n <<= 1;for( int i = 1;i <= n;i ++ ) scanf( "%lld", &a[i] );for( int i = 1;i <= n;i += 2 ) {if( a[i] == -1 and a[i + 1] == -1 ) cnt ++;else if( ~ a[i] and ~ a[i + 1] ) g[a[i]] = g[a[i + 1]] = 2;else {if( ~ a[i] ) g[a[i]] = 1;else g[a[i + 1]] = 1;}}for( fac = 1;cnt;fac = fac * cnt % mod, cnt -- );for( int i = n;i;i -- ) if( g[i] ^ 2 ) c[++ m] = i;f[0][0][0] = 1;for( int i = 0;i < m;i ++ )for( int j = 0;j <= n;j ++ )for( int k = 0;k <= n;k ++ )if( ! f[i][j][k] ) continue;else if( g[c[i + 1]] ) { //已知数( f[i + 1][j + 1][k] += f[i][j][k] ) %= mod; //新增一个未匹配的已知数if( k ) ( f[i + 1][j][k - 1] += f[i][j][k] ) %= mod; //和未知数匹配}else { //未知数( f[i + 1][j][k + 1] += f[i][j][k] ) %= mod; //新增一个未匹配的未知数if( j ) ( f[i + 1][j - 1][k] += f[i][j][k] * j % mod ) %= mod; //和已知数配对if( k ) ( f[i + 1][j][k - 1] += f[i][j][k] ) %= mod; //和未知数匹配}printf( "%lld\n", f[m][0][0] * fac % mod );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tree Xor(未完全搞定)

Tree Xor 题意&#xff1a; 一颗有n个点的树&#xff0c;边权给出&#xff0c;第i个节点的权值为Wi&#xff0c;但并不知道Wi&#xff0c;只知道Wi在[Li,Ri]&#xff0c;边权等于两端点的异或值 问W序列有多少可能 题解&#xff1a; 如果我们知道一个点的值&#xff0c;就可…

Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构&#xff0c;部署的微服务主要包括统一网关&#xff08;使用Ocelot开发&#xff09;、统一认证&#xff08;IdentityServer4&#xff09;、应用服务&#xff08;asp.net core web api&#xff09;&#xff1b;本文不…

AtCoder3950 [AGC022E] Median Replace(DFA + dp)

problem solution 可以从 DFA\text{DFA}DFA 的思想来考虑这道题。 考虑建一个 DFA\text{DFA}DFA 只接受最后可以变成字符串 111 的原串。 因为每次是选择三个 连续/相邻 的位置操作&#xff0c;限制是比较强的&#xff0c;无非有三种情况。 case1 三个全 111&#xff0c;操…

Minimum grid

Minimum grid 题意&#xff1a; 一个n * n的矩阵&#xff0c;有m个位置需要填数&#xff0c;填的数的范围是0<k<1e6,需要满足第i行的最大值是b&#xff0c;第j列的最大值是ci&#xff0c;求一个满足条件的最小代价 n<2e3,m<8e5,k<1e6 题解&#xff1a; 如果…

ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

一、前言在之前的文章&#xff08;ASP.NET Core 实战&#xff1a;Linux 小白的 .NET Core 部署之路&#xff09;中&#xff0c;我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core Runtime、Nginx、MySQL&#xff0c;以及如何将我们的 ASP.NET Core MVC 程序部署到 Li…

AtCoder 4169 [ARC100D] Colorful Sequences(dp)

problem 洛谷链接 solution 逆向考虑。ansansans 所有蛋糕中的 aaa 序列出现次数 −-− 在 non−colorfulnon-colorfulnon−colorful 蛋糕中的出现次数。 在所有蛋糕中的出现次数&#xff0c;即 (n−m1)⋅kn−m(n-m1)k^{n-m}(n−m1)⋅kn−m&#xff0c;枚举 aaa 序列开头的…

VS2017 无法连接到Web服务器“IIS Express”终极解决方案

今天日了gou了&#xff0c;一大早打开VS2017的时候出现无法连接到Web服务器“IIS Express”的错误&#xff0c;然后必应了一下&#xff0c;再谷歌了一下找到的解决方法也都千篇一律&#xff0c;奈何都没能解决&#xff0c;最后通过静下心来的思考&#xff0c;尝试解决了问题&am…

CodeForces 1361E James and the Chase(dfs + 结论)

problem 洛谷链接 solution 看到这个 20%20\%20% 的特殊性质&#xff0c;脑海里第一个就想到了随机化算法。已经PTSD了着实上头 如果本题只是随便求一个 interesting\text{interesting}interesting 的点&#xff0c;那就非常简单了。 随机化一个点&#xff0c;检查这个点是…

2021牛客暑期多校训练营4

2021牛客暑期多校训练营4 题号题目知识点ACourseBSample GameCLCSDRebuild TreeETree Xor思维线段树FJust a jokeGProductHConvolutionIInverse PairJAverage

Docker最全教程之使用.NET Core推送钉钉消息(二十)

前言上一篇我们通过实战分享了使用Go推送钉钉消息&#xff0c;由于技痒&#xff0c;笔者现在也编写了一个.NET Core的Demo&#xff0c;作为简单的对照和说明。最后&#xff0c;由于精力有限&#xff0c;笔者希望有兴趣的朋友可以分享下使用CoreRT将.NET Core编译成机器代码这块…

[线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程

线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0​,a1​,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r_{m-1}\}{r0​,r1​,...,rm−1​} 。 若对于任意 m−1≤nm-1\le nm−1≤n &#xff0c;有 ∑i0m−1an−iri0\sum_{i0}^{m-1}a_{n-i}r_i0∑…

Average

Average 题意&#xff1a; 矩阵W的值可以通过数组a和b得到&#xff0c;W[i][j]a[i]b[j],现在求W的一个子矩阵&#xff0c;平均值最大&#xff0c;且子矩阵必须满足宽度至少是x&#xff0c;高度至少是y&#xff0c;计算最大平均值 题解&#xff1a; 那答案就变成了分别对a和b…

开箱即用Bumblebee独立部署搭建webapi网关详解

在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关&#xff1b;但这样显然有些麻烦&#xff0c;毕竟很多时候可能只需要一个简单负载处理&#xff0c;还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的事情&#xff1b;如果有负载方面的调整还需要…

LCS(2021牛客多校4)

LCS(2021牛客多校4) 题意&#xff1a; 让你构造三个字符串s1,s2,s3&#xff0c;长度均为n,要求LCS(s1,s2)a,LCS(s2,s3)b,LCS(s1,s3)c 题解&#xff1a; 先考虑三个串互相LCS为x,y,z,且x>y>z 显然如果xy-n>z则无解&#xff0c;反之xy-n<z有解 那么就先给三个串加…

CodeForces 1616H Keep XOR Low {a^b≤x} / CodeForces gym102331 Bitwise Xor {a^b≥x}(trie树 + 计数)

文章目录CodeForces 1616H Keep XOR LowproblemsolutioncodeCodeForces gym102331 Bitwise XorproblemsolutioncodeCodeForces 1616H Keep XOR Low problem 洛谷链接 solution 虽然选的是一个子集&#xff0c;但本质还是二元限制。 这非常类似以前做过的题目&#xff0c;已…

ASP.NET Core 文件系统

静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 紧接上一讲 中间件 之后&#xff0c;今天来我们来讲一下关于 ASP.NET Core 中静态文件服务。什么是静态文件&#xff1f;先看一下下面例子&#xff08;在客户端浏览器中通过 url 路径访问了网站的一张图片&#xff09…

[C++] iota语句的语法

头文件为 numeric #include <numeric> using namespace std;语法和 sort / lower_bound / upper_bound 等差不多&#xff0c;都是前闭后开的原则。 iota(Ax,Ay,z) &#xff1a;表示将 AAA 数组的 [x,y)[x,y)[x,y) 区间进行填充&#xff0c;从 zzz 开始&#xff0c;每填…

如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...

这篇文章介绍一下&#xff0c;如何使用VS2017给asp.net core添加容器支持&#xff0c;并发布镜像到私有docker hub&#xff0c;然后用chart管理容器镜像的操作流程。话不多说&#xff0c;just do it.新建项目首先新建一个asp.net core项目&#xff0c;这里我新建一个WebApi默认…

Inverse Pair

Inverse Pair 题意&#xff1a; 一个数组a&#xff0c;现在构造一个数组c&#xff0c;c[i]a[i]0/1&#xff08;0或1&#xff09;&#xff0c;使得c的逆序对最少 题解&#xff1a; 如果x在x1的后面&#xff0c;我们让x这个数1,x1不变&#xff0c;就可以让逆序对少1。如果x在…

CodeForces 1610H Squid Game(延迟贪心 + 构造 + 树状数组)

problem 洛谷链接 solution 考虑重新随便钦定一个点为“根”&#xff0c;并且强制根必须是关键点。 则所有 x−yx-yx−y 不是直系祖先-子代的要求&#xff08;要求Ⅰ&#xff09;&#xff0c;即 xxx 不是 yyy 祖先&#xff0c;yyy 也不是 xxx 祖先&#xff0c;一定都被满足…