题面 给你\(n\)个数,\(n\le 26\)初始序列为\(a_i,0\le a_i\le 10^9\) 你有\(k\)个\(!\),每个\(!\)可以使序列中的一个数变成\(a_i!\) 例如\(5!=120\) 求:选出任意个数使他们和的等于S的方案数 题解 \(meet-in-the-middle\) 简单来说就是前半部分和后半部分分别爆搜 用个\(map\)啥的存一下前半部分的结果,后半部分的对应加上贡献就是了 ps:话说\(unordered\_map\)跑得比\(map\)快好多啊…
[CF888E]Maximum Subsequence(meet in the middle) 题面 CF 洛谷 题解 把所有数分一下,然后\(meet\ in\ the\ middle\)做就好了. 一侧的数正序,另一侧倒序,这样子指针单调就做完了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include&l…
题目传送门(内部题142) 输入格式 输入文件的第一行为两个数$n,P$. 接下来一行$n$为个正整数,表示每道题的分数. 输出格式 输出一行一个正整数,为至少需要获得的分数. 样例 样例输入: 2 0.51 2 样例输出: 数据范围与提示 设一道题分数的最大值为$m$.     对于$50\%$的数据,满足$n\leqslant 20$. 对于另$20\%$的数据,满足$m\leqslant 1,000$. 对于$100\%$的数据,满足$2\leqslant n\leqslant 40,1\…
题目描述 历史学考后,$MYC$和$ztr$对答案,发现选择题他们没有一道选的是一样的.最后他们都考了个$C$.现在问题来了,假设他们五五开,分数恰好一样(问答题分数也恰好一样,只考虑选择题).已知考题是$N$道选择题(第$i$题分数为$M(i)$).问$ztr$和$MYC$做对的题的并有多少种可能?众所周知,历史学考选择题有$25$题,但是$MYC$为了给你降低难度,$n$不超过$20$. 一句话题意:有多少个非空子集,能划分成和相等的两份. 原题见:$USACO\ 2012\ OPEN\ G…
点此看题面 大致题意: 在\(n\)个数中选任意个数,并使其中至多\(k\)个数\(x_i\)变为\(x_i!\),求使这些数和为\(S\)的方案数. \(meet\ in\ middle\) 这应该是\(meet\ in\ middle\)一道比较板子的题目. 我们先对于一半的数,爆搜然后开\((k+1)\)个\(map\)统计使用\(!\)个数小于等于\(i\),和为\(j\)的方案数. 然后对于另一半数,我们再爆搜一遍,到\(map\)中去找对应的情况使得使用\(!\)个数小于等于\(k\…
给一个数列和m,在数列任选若干个数,使得他们的和对m取模后最大( \(1<=n<=35\) , \(1<=m<=10^{9}\)) 考虑把数列分成两份,两边分别暴力求出所有的可能,那么对于一个数列中每一个数字\(x\),另一个数列加上它之后小于\(m\)的那个数是最优的,用双指针可以做到\(O(2^{n/2})\) 如果最终的答案是两个数列中的数加起来且大于\(m\)的,因为所有可能都是在模意义下,所以肯定是两个数列中最大的数加起来最优,判断一下就好了 //minamoto #in…
思想 先搜索前一半的状态,再搜索后一半的状态,再记录两边状态相结合的答案. 暴力搜索的时间复杂度通常是 \(O(2^{n})\) 级别的.但折半搜索可以将时间复杂度降到 \(O(2 \times 2^{\frac{n}{2}})\),再加上统计答案的时间复杂度,总复杂度几乎缩小了一半. 例题 「CEOI2015 Day2」世界冰球锦标赛 题目链接 Luogu P4799 [CEOI2015 Day2]世界冰球锦标赛 分析 用折半搜索的思想,先搜索 \(0 \sim \lfloor \frac{n…
一眼题...这个数据范围也太明显了吧... suma1==suma2 && sumb1==sumb2 && sumc1==sumc2 相当于suma1-sumb1==sumb2-suma2 && suma1-sumc1==sumc2-suma2 于是前一半O(3^(N/2))搜出所有情况的suma1-sumb1和suma1-sumc1,后一半搜出sumb2-suma2和sumc2-suma2,都丢到一个数组里作为两个关键字排序,在两个关键字都相同的一段里面找…
[BZOJ4800][Ceoi2015]Ice Hockey World Championship (meet in the middle) 题面 BZOJ 洛谷 题解 裸题吧,顺手写一下... #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define ll long long inline ll read() { ll x=0;bool t=false;ch…
[CF912E]Prime Game(meet in the middle) 题面 CF 懒得翻译了. 题解 一眼题. \(meet\ in\ the\ middle\)分别爆算所有可行的两组质数,然后二分答案,\(two-pointers\)扫一下就好了. #include<iostream> #include<cstdio> #include<algorithm> #include<vector> using namespace std; #define…