【Atcoder agc020 C】Median Sum,序列子集和中位数,bitset,01背包
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背包相关推荐
- 2018.08.10 atcoder Median Sum(01背包)
传送门 题意简述:输入一个数组anan. 对于所有2n−12n−1个非空子集,每个子集的权值是包含的所有元素之和. 求这2n−12n−1个非空子集权值的中位数. 对于每个权值vv都有一个对应的&quo ...
- python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例
本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...
- 416. 分割等和子集 - 01背包中判断是否装满的问题
✅01背包中是"否能装满"的问题 如果能把数组分割成两个子集且使得子集的元素和相等,那么证明该集合的元素总和必须要是能被2整除的,这是一个前提条件 假设总和为sum,那问题就转化成 ...
- 代码随想录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数组 ...
- 问题 E: 序列操作Ⅰ(01背包)
问题 E: 序列操作Ⅰ 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][讨论版] 题目描述 给定长度为 N 的正整数序列 A_1, A_2, A_3,-, A_N, 从中选出若干个 ...
- 给定一个整数序列,求中位数
问题描述: 给定一个整数序列,求中位数.如果序列个数为奇数,中位数为升序的中间位置,如果是偶数,这位升序的中间两个数的平均值. 输入: 输入包含多组测试数据,每一组第一行为n(n<104)表示这 ...
- AT3857-[AGC020C]Median Sum【背包,bitset】
正题 题目链接:https://www.luogu.com.cn/problem/AT3857 题目大意 给出nnn个数字的一个序列aaa,求它的所有非空子集的和的中位数. 1≤n,ai≤20001\ ...
- AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
题目链接 https://atcoder.jp/contests/agc039/tasks/agc039_f 题解 又是很简单的F题我不会... 考虑先给每行每列钦定一个最小值\(a_i,b_j\), ...
- LeetCode 416. 分割等和子集(动态规划)(0-1背包)
题目描述 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, ...
最新文章
- c语言实现补码加减,C语言实现用位移运算符进行加减乘…
- Process类中与内存相关的属相不能更新!
- 计算机科学班(原acm班),计算机科学创新实验班(以下简称ACM班)培养计划.doc
- 打包无法识别lombok
- 微信小程序最新开发资源汇总,对学习微信小程序的新手有一定帮助
- exchange2013 owa-outlook界面语言
- cv2.imread读取图像结果none_python cv2.imread 读取中文路径的图片返回为None的问题
- 2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)
- linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)
- SqlConnection调用Dispose方法之后还可以在连接池中复用吗?
- JavaScript数据类型之算术运算符(7)
- 微软最近对外发布了必应翻译应用开发接口(API),Facebook成为第一批尝鲜者...
- navicat超时未激活如何处理?
- 快速对接第三方接口--短信接口
- 形式语言与自动机_第二章_语言及文法
- transformer中的多头注意力机制
- Android虚拟机使用摄像头(命令行)
- html查看器查看图片,jQuery功能强大的图片查看器插件
- 学生会管理系统(SSM)vue+ssm+shiro
- python语句和语法(一)