problem

C - Median Sum / Time Limit: 2 sec / Memory Limit: 512 MB Score : 700 points Problem Statement

You are given N integers A 1 , A 2 , …, A N . Consider the sums of all non-empty subsequences of A . There are 2 N − 1 such sums, an odd number. Let the list of these sums in non-decreasing order be S 1 , S 2 , …, S 2 N − 1 . Find the median of this list, S 2 N − 1 . Constraints 1 ≤ N ≤ 2000 1 ≤ A i ≤ 2000 All input values are integers.

C-中位数/时间限制:2秒/内存限制:512 MB得分:700分问题陈述

给您N个整数A 1,A 2,…,A N。 考虑A的所有非空子序列的总和。 这样的和有2 N-1个,一个奇数。 令这些和以非降序排列的列表为S 1,S 2,…,S 2 N -1。 找到该列表的中位数S 2 N − 1。 约束1≤N≤2000 1≤A i≤2000所有输入值都是整数。

input:
3
1 2 1

output:
2

solution

/*
Atcoder,  agc020_c
题意:
+ 给出一个长为n的序列,考虑所有(2^n-1)个非空子序列的和
+ 令这些和升序排列,输出它们的中位数。
思路:
+ 将序列等价于集合S,子序列就是非空子集A。对于每个A,它的补集要么是空集,要么也在S中。
+ 将两个互补的子集看做一组,那么每组中至少一个子集>=sum/2,另一个子集<=sum/2。
+ 所以这个序列的中位数就是第一个大于等于sum/2的子集,所以可以用01背包来解。
+ 因为V=4e6,N=2e3,VN=8e9,会超时,因为是二进制所以可以用bitset优化。因为dp[i]=max(dp[i],dp[i-ai]),所以左移的操作就可以做到这个目的。
+ 比如101011,ai=3,101011<<3=101011000,101011000|101011=10111011就相当于用ai更新了一次。
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e6+10;
bitset<maxn>b;
int main(){int n;  cin>>n;int sum = 0;vector<int>a(n);for(int i = 0; i < n; i++){cin>>a[i];  sum += a[i];}b[0] = 1;for(int i = 0; i < n; i++)b |= (b<<a[i]);int ans = sum+1>>1;while(b[ans]==0)ans++;cout<<ans<<"\n";return 0;
}

【Atcoder agc020 C】Median Sum,序列子集和中位数,bitset,01背包相关推荐

  1. 2018.08.10 atcoder Median Sum(01背包)

    传送门 题意简述:输入一个数组anan. 对于所有2n−12n−1个非空子集,每个子集的权值是包含的所有元素之和. 求这2n−12n−1个非空子集权值的中位数. 对于每个权值vv都有一个对应的&quo ...

  2. python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

    本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...

  3. 416. 分割等和子集 - 01背包中判断是否装满的问题

    ✅01背包中是"否能装满"的问题 如果能把数组分割成两个子集且使得子集的元素和相等,那么证明该集合的元素总和必须要是能被2整除的,这是一个前提条件 假设总和为sum,那问题就转化成 ...

  4. 代码随想录42——动态规划:0-1背包理论基础、0-1背包滚动数组、416分割等和子集

    文章目录 1.0-1背包理论基础 1.1.概述 1.2.0-1背包 1.3.二维dp数组01背包--动规五部曲 1.4.完整测试代码 2.0-1背包滚动数组 2.1.一维滚动数组 2.2.一维dp数组 ...

  5. 问题 E: 序列操作Ⅰ(01背包)

    问题 E: 序列操作Ⅰ 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][讨论版] 题目描述 给定长度为 N 的正整数序列 A_1, A_2, A_3,-, A_N, 从中选出若干个 ...

  6. 给定一个整数序列,求中位数

    问题描述: 给定一个整数序列,求中位数.如果序列个数为奇数,中位数为升序的中间位置,如果是偶数,这位升序的中间两个数的平均值. 输入: 输入包含多组测试数据,每一组第一行为n(n<104)表示这 ...

  7. AT3857-[AGC020C]Median Sum【背包,bitset】

    正题 题目链接:https://www.luogu.com.cn/problem/AT3857 题目大意 给出nnn个数字的一个序列aaa,求它的所有非空子集的和的中位数. 1≤n,ai≤20001\ ...

  8. AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)

    题目链接 https://atcoder.jp/contests/agc039/tasks/agc039_f 题解 又是很简单的F题我不会... 考虑先给每行每列钦定一个最小值\(a_i,b_j\), ...

  9. LeetCode 416. 分割等和子集(动态规划)(0-1背包)

    题目描述 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, ...

最新文章

  1. c语言实现补码加减,C语言实现用位移运算符进行加减乘…
  2. Process类中与内存相关的属相不能更新!
  3. 计算机科学班(原acm班),计算机科学创新实验班(以下简称ACM班)培养计划.doc
  4. 打包无法识别lombok
  5. 微信小程序最新开发资源汇总,对学习微信小程序的新手有一定帮助
  6. exchange2013 owa-outlook界面语言
  7. cv2.imread读取图像结果none_python cv2.imread 读取中文路径的图片返回为None的问题
  8. 2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)
  9. linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)
  10. SqlConnection调用Dispose方法之后还可以在连接池中复用吗?
  11. JavaScript数据类型之算术运算符(7)
  12. 微软最近对外发布了必应翻译应用开发接口(API),Facebook成为第一批尝鲜者...
  13. navicat超时未激活如何处理?
  14. 快速对接第三方接口--短信接口
  15. 形式语言与自动机_第二章_语言及文法
  16. transformer中的多头注意力机制
  17. Android虚拟机使用摄像头(命令行)
  18. html查看器查看图片,jQuery功能强大的图片查看器插件
  19. 学生会管理系统(SSM)vue+ssm+shiro
  20. python语句和语法(一)

热门文章

  1. markdownpad 2 的使用
  2. 计算机网络基石 —— 集线器
  3. 极简代码(四)—— 分段函数(sinc)的实现
  4. numpy 常用api(一)
  5. python教程-Python2 教程
  6. 学完python能做什么-学完Python开发可以从事哪些行业?
  7. python代码示例-Python3 实例
  8. 自学python考哪些证书-给零基础学习Python的小伙伴的四个建议
  9. 科大讯飞语音识别率从97%提升至98% 用AI赋能方言保护
  10. 语音识别模块解决方案