首页 > TAG信息列表 > finv
CF EDU 111 D - Excellent Arrays
D - Excellent Arrays 思维 + 组合数学 + 树形结合 \(a_i+a_j=i+j\), 看到这样的形式先移项变成 \(a_i- i=-(a_j-j)\), 令 \(k_i=a_i-i\), 即 \(k_i=-k_j\) \(k_i=a_i-i\) 即 \(y=x+k_i\), 所以若 \(a_i\) 在 \(y=x+k_i\) 这条直线上,则偏移量就是 \(k_i\) 本题要让 \(F(a)\) 尽量组合数
1 #include <iostream> 2 3 using namespace std; 4 5 typedef long long LL; 6 const int MAXN=200010; 7 const int MOD=(int)1e9+7; 8 int F[MAXN],Finv[MAXN],inv[MAXN]; //F是阶乘,Finv是逆元的阶乘 9 10 void init() 11 { 12 inv[1]=1; 13 for (intFlipping Game 题解(dp)
题目链接 题目思路 这个\(dp\)比较巧妙 设\(dp[i][j]\)表示在第\(i\)次操作后,还有\(j\)个数不一样的答案 那么最后输出\(dp[k][0]\) 转移方程即每次枚举选了s个与最终态不同的灯,m-s个与最终态相同的灯操作 那么\(dp\)方程即为 $ dp[i+1][j-s+m-s]=dp[i+1][j-s+m-s]+dp[i][j]c(j,s)Character Encoding题解(容斥)
题目链接 题目思路 计算有多少种方案使得 \(x_1+x_2+...+x_m=k(0\leq x_i \leq n)\)的方案数 假设没有限制,那么根据隔板法就是\(c(m+k-1,m-1)\) 下面考虑容斥 考虑至少有\(i\)个点大于\(n\),那么取\(i\)个点直接给他先赋值为\(n\)再进行隔板 则方案数为\(c(m,i)*c(m+k-1-i*n,m-1)\)msc的背包(生成函数)
msc的背包 思路:显然分别对大小为1和2的分别构造生成函数 即 \(1+x+x^2+x^3+...\)= \(\frac{1}{1-x}\) 和 \(1+x^2+x^4+....\) = \(\frac{1}{1-x^2}\) 总贡献为 \(\frac{1}{(1-x)^n(1-x^2)^m}\)=\(\frac{1}{(1-x)^n(1-x)^m(1+x)^m}\)=\(\frac{(1+x)^n}{(1-x^2)^{n+m}}\) 分子是二项E. Placing Rooks
题目地址 题意:给定n和k,在n*n的棋盘上放n个“车”,使每一个空格都能被某一个车攻击到,且恰好有k对车可以相互攻击,求放置的方案数。 思路:首先要满足第一个条件,每一行和每一列都至少有一个车,那么只要刚好一行一个车就能满足条件,最后答案乘二就是加上每列刚好一个。然后要满足第二Link with Balls 题解(结论题+组合数学)
题目链接 题目思路 这是一个经典的结论题,以前写过,但是忘了。。。 直接放官方题解 将可以取\(0 到 k-1\)个球的框与只能取\(k\)的倍数个球的框合并为一个可以取任意个球的框,就得到了\(n\)个 可以取任意个球的框和一个可以取\(0到n\)个球的框。枚举 \(0到n\)个球的框中取出了多少个D. Petya and Coloring 题解(组合数学+dp+容斥)
题目链接 构造方法比较容易想到 第1列和第m列的颜色种数要相等,中间的列颜色来源于第1列和第m列中的共同颜色 主要的问题是如何解决\(n\)个元素里面存在\(i\)个元素,且每个元素至少存在一次的方案数 这是一个经典问题,可以利用dp+容斥去解决 代码 #include<bits/stdc++.h> #define fi