首页 > 其他分享 >Solution - Median Sum

Solution - Median Sum

时间:2024-01-31 20:44:07浏览次数:26  
标签:cout int dfrac Sum Median Solution leq 子集 sum

其它题不是很写得动了跑来写一下这个题,还是挺有趣的。

给定由 \(n\) 个正整数 \(a_1, a_2, \dots, a_n\) 组成的可重集合,求出它的非空子集的和的中位数。

设 \(sum = \sum\limits_{i = 1} ^ n a_i\)。

首先是对于任意一个子集,设其和为 \(x\),我们将其取反,就是选的改成不选,不选的改成选,那么前后子集之和是 \(sum\),改之后的子集和就是 \(sum - x\),不妨 \(x \leq sum - x\),那么一定有 \(x \leq \dfrac{sum}{2}, sum - x \geq \dfrac{sum}{2}\)。如果这时候把空集也算进去(方便计算,而中位数取中间更大的那个即可,也就是从小到大排序之后位于 \(\dfrac{2 ^ n}{2} + 1 = 2 ^ {n - 1} + 1\) 位置的数),和 \(\leq \dfrac{sum}{2}\) 的子集个数就一定为 \(2 ^ {n - 1}\)。于是我们只需要找到第一个 \(> \dfrac{sum}{2}\) 的子集和就好了。

于是就转化成了一个存在性问题。因为这个 \(n, a_i \leq 2000\),考虑直接设 \(f_{i, j}\) 表示前 \(i\) 个数的和能否是 \(j\)。转移不表,但是这样时空复杂度都是 \(O(n ^ 3)\) 的。滚动数组空间可以优化到 \(O(n ^ 2)\),至于转移可以发现就是一堆或的操作,用 bitset 维护,为 \(O(\dfrac{n ^ 3}{w})\),就可以过了。

namespace liuzimingc {
const int N = 2e3 + 5, M = 4e6 + 5;

int n, a[N], sum;
bitset<M> f[2];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i], sum += a[i];
	f[0][0] = true;
	for (int i = 1; i <= n; i++) {
		f[i & 1] = f[i - 1 & 1]; // 不选第 i 个
		f[i & 1] |= f[i - 1 & 1] << a[i]; // 选第 i 个
	}
	for (int i = sum + 1 >> 1; ; i++) // >= sum / 2,隐含向上取整
		if (f[n & 1][i]) return cout << i << endl, 0;
	return 0;
}
} // namespace liuzimingc

标签:cout,int,dfrac,Sum,Median,Solution,leq,子集,sum
From: https://www.cnblogs.com/liuzimingc/p/18000089/median

相关文章

  • [ARC163D] Sum of SCC 题解
    题目链接点击打开链接题目解法好牛的性质!!!首先一个家喻户晓的性质是:竞赛图缩点之后是一条链考虑从这个上面拓展出一个更优美的性质:竞赛图的\(scc\)个数\(=\)把点集分成两个集合\(A,B\),满足\(\forallu\inA,v\inB\),\(u,v\)之间边的方向为\(u\tov\)的方案数\(-1\)......
  • TUniDBGrid控件之Summary例子
    TUniDBGrid控件之Summary例子(记录一下,方便以后备查)在这个例子中,主要用到TUniDBGrid、TClientDataSet和TDataSource三个控件。本文除去介绍使用TUniDBGrid控件之Summary外,TClientDataSet使用FieldDefs用于自定义的字段名表(即:不使用dataprovider)参考:Delphi中ClientDataSet的用......
  • Solution Set #9
    在cdqz的集训结束了,虽然总榜比较好看但感觉只过了一堆平凡题。怎么一个月就省选了(恼)150【IOI2016】shortcut(拆绝对值)考虑确定了架桥架在哪里之后怎么算(经过桥的)直径。实际上就是\(\max(|pos_u-pos_x|+|pos_v-pos_y|+d_u+d_v)\)。大力转切比雪夫(大概)然后二分,先排除\(|pos_......
  • Solution Set【2024.1.27】
    CF1778FMaximizingRoot首先不难证明不操作根节点一定不优,因此我们考虑操作根节点的情况。现在我们的问题转化为了:最大化操作根节点前的整个树的节点权值的最大公约数。由于可能的最大公约数值只有\(\mathcal{O}(\sqrt{V})\)种。因此我们考虑将其压入状态进行动态规划。设......
  • Solution - 数字配对
    因为网络流的题一直都做得很烂,所以写一发这个题。第一眼感觉可以暴力\(O(n^2)\)连边,然后我去为什么是价值总和不小于\(0\)?我的最小费用最大流班子都准备好了???哦(看了一下下题解),这个配对相当于是流量,然后如果我们固定流量的话,最大价值和是有单调性的。很好感性理解,流量越大即......
  • Summary - ber 中周赛 Round 24
    倒数第一我最强,worthreflecting,故记之。T1一开始读错题了,浪费了不知道多久。然后后面实在不会了打了一个很丑的\(O(n\logn)\)。中途提示说学了双指针,但是认为那是T3用的,,,总之就没想到。但是为什么呀?固定好了右端点逐渐变大,左端点也变大,那么中间的最优决策点也逐渐变大。......
  • ARC127D Sum of Min of Xor
    ARC127DSumofMinofXor性质分析加通用套路。思路首先我们把这题的\(\min\)给去掉,那么我们按位算贡献,可以求出和。这是这种式子的通用套路。考虑加上\(\min\),那么我们先按照\((a_i,b_i)\)的最高位分为:\((1,0)\),\((0,1)\),\((1,1)\),\((0,0)\)四种情况。可以发现用贡献......
  • solution-arc158e
    [ARC158E]AllPairShortestPaths还是挺牛逼的一题。但是为什么其他题解都说很板?看来还是我太菜了,见的题太少了。主要参考@TeneryTree首先考虑CDQ分治,只考虑处理\([l,mid]\)中的到\([mid+1,r]\)这些点的路径和。由于列数\(m=2\)所以我们考虑设\(f_{i,0/1}\)为左......
  • CF1920B Summation Game
    题目传送门codeforces洛谷题面AliceandBobareplayingagame.Theyhaveanarray$a_1,a_2,\ldots,a_n$.Thegameconsistsoftwosteps:First,Alicewillremoveatmost\(k\)elementsfromthearray.Second,Bobwillmultiplyatmost\(x\)elementsoft......
  • Comparison between IPQ9574 and IPQ9554 | MLO EHT Solution Unveils the WiFi 7 CPU
    ComparisonbetweenIPQ9574andIPQ9554|MLOEHTWiFi7QualcommSolutionUnveilstheWiFi7CPUforIndustrialApplications-AlderSeriesWi-Fi7elevateswirelessexperiencesandwillaccelerateemergingusecaseswithitsextremedataspeedsandconsis......