zoukankan      html  css  js  c++  java
  • [AT3857]Median Sum

    题目大意:给定$n$个数,第$i$个数为$a_i$,记这$n$个数的所有非空子集的和分别为$s_1,s_2,dots,s_{2^n-1}$;求$s$的中位数。

    题解:假设考虑的是所有子集,包括空子集。

    令$sum=sumlimits_{t=1}^n a_i$。

    若有一个子集和为$x$,存在另一个子集和为$sum-x$。

    因此不含空子集的中位数等价于所有出现过的数的中间两个的后一个。

    $0/1$背包就好了,可以用$bitset$优化

    卡点:

    C++ Code:

    #include <cstdio>
    #include <bitset>
    using namespace std;
    int n, s, sum;
    bitset<2000001> v;
    int main() {
    	scanf("%d", &n);
    	v[0] = 1;
    	for (int i = 1; i <= n; i++) {
    		scanf("%d", &s);
    		sum += s;
    		v |= v << s;
    	}
    	for (int i = sum + 1 >> 1; i <= sum; i++) {
    		if (v[i]) {
    			printf("%d
    ", i);
    			break;
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    IndexDB
    实现es6中的set和map
    视口viewport
    nginx入门
    http协议
    图像格式
    promise
    js中this指向
    CSS 7阶层叠水平
    C# 一个方法如何返回多个值
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9466325.html
Copyright © 2011-2022 走看看