传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\(k\)组糖果比药片大. 显然,\(a,b\)数组都要先从小到大排序.(\(a\)是糖果,\(b\)是药片) 考虑\(a_i\)造成的影响: 1.若它匹配了一个比它小的\(b\),则对于\(a_j,j>i\),它匹配比它小的\(b\)的方案数少了\(1\). 2.若它匹配了一个比它大的\(b\)--…
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) 互不相等.将糖果和药片一一对应,求 糖果能量大于药片 比 药片能量大于糖果 多 \(k\) 组的方案数. 数据范围:\(1\le n\le 2000\),\(0\le k\le n\). 萌新初学二项式反演,这是第一道完全自己做出来的题,所以写篇题解庆祝并提升理解. 有 \(\frac{n+k}{2…
已经没有什么好害怕的了 题目描述 已经使\(\tt{Modoka}\)有签订契约,和自己一起战斗的想法后,\(\tt{Mami}\)忽然感到自己不再是孤单一人了呢. 于是,之前的谨慎的战斗作风也消失了,在对\(\tt{Charlotte}\)的傀儡使用终曲--\(\tt{Tiro Finale}\)后,\(\tt{Mami}\)面临着即将被\(\tt{Charlotte}\)的本体吃掉的局面. 这时,已经多次面对过\(\tt{Charlotte}\)的\(\tt{Honiura}\)告诉了学\(…
因为不存在任意两个数相同,那么设糖果比药片大的组有 \(x\) 个,药片比糖果大的组有 \(y\) 个,那么我们有: \[x + y = n, x - y = k \] 即: \[x = \frac{n + k}{2}, y = \frac{n - k}{2} \] 估本题实质上是问有多少种方案使得糖果比药片大的组恰好有 \(\frac{n + k}{2}\) 个,也就是有 \(\frac{n + k}{2}\) 个糖果匹配了比他小的药片.因为选择的顺序是没有关系的,因此为了能方便的知道当前这个…
Description: ​ 有两个数组a和b,两两配对,求 \(a_i>b_i\) 的配对比 \(b_i>a_i\) 的配对多 \(k\) 个的方案数 \(k\le n\le 2000\) Solution: ​ 先将 \(a,b\) 排序,求出 \(cnt[i]\) 表示比 \(a[i]\) 小的 \(b[j]\) 有多少个,然后恰好k个不好求,求至少 \(k\) 个,然后容斥. ​ 设 \(dp[i][j]\) 表示到 \(a\) 的前 \(i\) 位,有 \(j\) 对 \(a>…
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 $i$ 的个数恰好多 $k$ 个.答案对 $10^9+9$ 取模. $1\le n\le 2000,0\le k\le n$.保证 $a,b$ 中没有相同的数. 首先根据小学数学知识可知,$a_i>b_i$ 的个数应该是 $\frac{n+k}{2}$.如果 $n+k$ 不是偶数那么就无解. 那么就可…
洛谷题目传送门 Dalao的题解多数是什么模拟退火.DFS剪枝.\(O(3^nn^2)\)的状压DP之类.蒟蒻尝试着把状压改进了一下使复杂度降到\(O(3^nn)\). 考虑到每条边的贡献跟它所在的层有关,所以如果我们能够将一层的边一起加进去,计算就会方便许多.于是想办法把这个转移过程状压一下. 设\(f_{i,j}\)为当前已选点集为\(i\),下一层加入的点集为\(j\)时,新加入的所有点与原有点之间最小的边权之和.计算的具体实现,我们\(O(2^n)\)枚举\(i\),再枚举\(i\)的补…
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\forall a \le b \le c \le d\)有 \[val(a,d) + val(b,c) \ge val(a,c) + val(b,d)\] 那么我们称函数\(val(i,j)\)满足四边形不等式 一般地,当我们需要证明一个函数\(val(i,j)\)满足四边形不等式时,只需证对于\(\fo…
题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #include<iostream> using namespace std; #define maxn 355 int n,m,ans; ],point[maxn]; ][][][]; int main() { cin>>n>>m; ;i<=n;i++) cin>>…
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一列求出长度为n的前面算出来的最大值的最大值,前面算出来的最小值的最小值.如果直接做是n的三次方,但是用单调队列优化后就是n方的. #include <algorithm> #include <iterator> #include <iostream> #include &l…