首页 > 其他分享 >P4921 题解

P4921 题解

时间:2024-05-02 19:12:31浏览次数:21  
标签:方案 题解 情侣 times P4921 ans 错排

link

Hint:错排计数。

\(ans_k=C_n^k\times A_n^k\times 2^k\times g(n-k)\)

\(g(i)\) 代表 \(i\) 对情侣全部错开的方案数。

解释一下 \(ans_k\) 的表达。

我们从 \(n\) 对情侣中无序地抽出 \(k\) 对情侣,有序地放到 \(k\) 排座位上,这里的方案数是 \(C_n^k\times A_n^k\)。由于两个相邻的人可以交换,所以需要 \(\times 2^k\)。对于剩下的 \(n-k\) 对情侣,必须要将他们全部错开,显然应该是乘法原理。

或者将 \(C_n^k\times A_n^k\) 视作有序地抽出 \(k\) 对情侣,无序地放到 \(k\) 排座位上也可。

现在考虑一下怎么求 \(g(i)\),我们选择递推的经典策略。

假设 \(i-1\) 对已经错排好,现在要加入第 \(i\) 对。先来讨论第 \(i\) 对的男生和前面的某一个男生坐在一起的情况,此时该座位的方案数有 \((n-1)\)。假如说他们的情侣坐在一起,那么这里的方案数为 \(2(n-1)\),\((n-1)\) 代表有 \((n-1)\) 个座位可以选择,\(2\) 代表两个人可以交换位置。对于剩下的 \(n-2\) 对情侣,只需要让他们错排即可,方案数为 \(g(n-2)\)。由于 \(n\) 对情侣中的每一对都可以座位新加入的,所以总方案数还要乘上一个 \(n\)。

当女生坐在一起时同理。对于一男一女坐在一起的情况,总体仍与上面一致,只不过加入这一男一女时的方案数是 \(2(n-1)\),代表第一个人可以是男也可以是女。

具体见下图:

得到 \(g(n)=4n(n − 1)(2(n − 1)g(n − 2) + g(n − 1))\)。

递推即可。

标签:方案,题解,情侣,times,P4921,ans,错排
From: https://www.cnblogs.com/BYR-KKK/p/18170445

相关文章

  • UVA1362 Exploring Pyramids 题解
    题目传送门前置知识欧拉序|区间DP|乘法原理解法DFS序可近似理解为欧拉序,故考虑区间DP。设\(f_{l,r}\)表示\([l,r]\)对应的二叉树的个数,状态转移方程为\(f_{l,r}=\begin{cases}1&l=r\\[s_{l}=s_{r}]\times\sum\limits_{i=l+2}^{r}[s_{l}=s_{i}]\timesf_{......
  • Educational Codeforces Round 165 (Rated for Div. 2) C. Minimizing the Sum题解
    题意CodeforcesRound809(Div.2)D1.ChoppingCarrots(EasyVersion)给你两个整数\(n(1\len\le3e5),k(0\lek\le10)\),一个数组\(a(1\lea_i\le10^9)\)。你可以进行如下操作最多\(k\)次:选定一个数\(i(1\lei\len)\),让其变为相邻的数(变为\(a_{i-1},a_{i......
  • P1017 [NOIP2000 提高组] 进制转换 题解
    题目简述给定一个十进制数$n$,将其转换成一个$-R$进制数。题目分析十进制数转负进制,同样可以使用短除取余法,但是会出现余数为负的情况,例如$-11\div-2=5~\cdots\cdots-1$,此时我们可以用如下法方解决此问题:我们设被除数为$a$,除数为$b$,余数为$c$,商为$d$,其中$c<0$......
  • P2192 HXY玩卡片 题解
    题目简述给定一些$5$和$0$的数字,让你在其中选择一些数进行排列成为一个非负整数,使得这个数字能被$90$整除,且是所有满足条件的数中最大的一个,无解输出$-1$。题目分析如果一个数能被$90$整除,那么它一定能被$9$和$10$整除。能被$10$整除,那就说面答案的个位数一定......
  • [题解]P4597 序列 sequence
    P4597序列sequence是CF13CSequence的加强版,\(N\leq5*10^5\)。如果想了解\(O(N^2)\)的DP解法请看此文。给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?看到数据范围发现不能用\(O(N^2)\)的dp了,需要换一种思路。我们用类......
  • [题解]CF13C Sequence
    CF13CSequence给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?我们用DP解决。对\(a\)从小到大排序,存在\(c\)中。我们用\(f[i][j]\)表示让前\(i\)个元素满足条件,而且这些元素最大值不超过\(c[j]\)的最小操作次数。状态转移方......
  • 异或与区间加题解
    异或与区间加题解简要题意给定\(n,m,K,a_{1...n}\),和\(m\)个三元组\((x_i,y_i,z_i)\),定义\(calc(l,r)=a_l\bigoplusa_{l+1}\bigoplus...\bigoplusa_r\)。对于每个三元组\((x,y,z)\),对所有满足\(x\lel\ler\ley\,\calc(l,r)=K\)的区间\((l,r)\)内的每个数\(b......
  • CF1967B2 Reverse Card (Hard Version) 题解
    题意:求有多少对\((a,b)\)满足\(b\times\gcd(a,b)\equiv0\pmod{a+b},1\lea\len,1\leb\lem\)。首先我们设\(\gcd(a,b)=G,a=i\timesG,b=j\timesG\),显然有\(\gcd(i,j)=1\)。那么可以把原条件转化为\(j\timesG\)是\((i+j)\)的倍数。因为\(\gcd(i+......
  • Codeforces Round 942 Div.2 题解
    蹭个热度,挽救一下cnblogs蒸蒸日上的阅读量。Q:你是手速狗吗?A:我觉得我是。2A因为选的\(w\)一定可以让它合法,一次操作可以看作\(a\)数组向右平移一位。枚举操作次数后暴力判断即可。#include<bits/stdc++.h>voidwork(){ intn; std::cin>>n; std::vector<......
  • 【题解】 量化交易5
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......