题目链接

题意:给定三个背包,各自装有n1 n2 n3个数,每次操作从任意两个背包A B分别选出任意一个数a b,然后丢掉b ,把a替换成a-b 。 问重复操作下去最后剩下的数最大可以是多少。
(1<=n<=3e5)

分析:我们用A B C表示3个背包,min(B)<min(A) 且 min(C)<min(A)
假设最终的数是在A中。

一个数从初始背包转移出去,当且仅当它转移次数为偶数的时候才能对答案有正贡献。比如B中的某个数b[i],要产生正贡献比如和C中某个数结合,然后转移进A 。

于是我们想到一种贪心策略:
找出B C中各自最小的数minb ,minc 。
B中其他数与minc结合然后进入A ,
C中其他数与minb结合进入A ,
A中任意保留一个数a,其他的数都与minc/minb结合再与a结合,作正贡献。
这样最终只有minb、minc这两个数作了负贡献 。
答案就是allsum-2*(minb+minc)。

这种策略让B C两个集合的各自最小值作了负贡献,
另外我们还可以只让一个集合作负贡献 ,B中每个数都视为为C的中转站,
那么最终只有B集合全部的数作负贡献 。
答案就是allsum-2*sum(B)

两种策略取最优。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int maxn = 3e5+5;
const int mx = 40;
const int mod = 1e9+5;
const ll inf = 34359738370;
const int INF = 1e9+5;
//给定3个允许有重复元素的背包 装有整数 最大1e9
//每次操作可以任选背包1 2 各取一个数a b  丢弃1的a 2的b变成b-a
//最终只留下一个数  问最大能是多少//3个集合初始都是非空集合 一个数进入其他背包偶数次才能有正贡献
//两种贪心策略
//1、取来自2个集合的最小的数  作为中转站  其余数和他们结合 然后再进入最终的背包
//答案就是其余数之和-这两个来自不同集合的最小的数
//2、舍弃一个集合作为中转站  答案是其余两个集合之和-和最小的集合的和
int n[4];
ll sum[4],mmin[4];
int main()
{mmin[1]=mmin[2]=mmin[3]=inf;for(int i=1;i<=3;i++) scanf("%d",n+i);for(int i=1;i<=3;i++){for(int j=1;j<=n[i];j++){ll t;scanf("%I64d",&t);mmin[i]=min(mmin[i],t);sum[i]+=t;}}sum[0]=sum[1]+sum[2]+sum[3];//sum[0]为所有数的和ll ans=sum[0]-2*min(min(sum[1],sum[2]),sum[3]);//策略2  和最小的集合作负贡献ll mn2=mmin[1]+mmin[2]+mmin[3]-max(max(mmin[1],mmin[2]),mmin[3]);//最小的2个min之和ans=max(ans,sum[0]-2*mn2);//策略1cout<<ans;return 0;
}

Three Bags CodeForces - 1467C (贪心)相关推荐

  1. Three Bags CodeForces - 1467C

    题意: 三堆石子,你可以取两堆石子各一个石头a,b.然后消掉a,使得b=b-a再放入b的那一堆.这样操作直到只剩下一个石子,求该石子价值最大. 题解: 构造题 可以构造出两者情况: 其中两堆都是正的, ...

  2. 贪心 ---- Codeforces Global Round 8,B. Codeforces Subsequences[贪心,贪的乘法原理]

    题目链接 给出字符串,统计子串(子串字母可以跳跃)是codeforces的数量. 本题要求,给出子串最少数量k,构造字符串s,要求字符串s包含的字母数量最少,输出这个最少的字符串s. 题目要求是至少有 ...

  3. CodeForces - 93B(贪心+vectorpairint,double +double 的精度操作

    题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...

  4. Codeforces 985C (贪心)

    传送门 题面: C. Liebig's Barrels time limit per test 2 seconds memory limit per test 256 megabytes input ...

  5. Minimize the Permutation CodeForces - 1256(贪心)

    题意: q次询问,每次询问给你长度为n的排列,然后你每次可以选择一个位置i和i+1的数字进行交换.但是每个位置只能交换一次,问你反转若干次后,这个排列最小是多少? 题目: You are given ...

  6. Minimizing Difference CodeForces - 1244E(贪心题)

    题目 题意 官方题解: 百度翻译 思路 ac代码 题意 给出一列数,至多n个操作使其中的数+1或-1,要求得到最小的差值(最大值-最小值): You are given a sequence a1_{ ...

  7. Serval and Parenthesis Sequence CodeForces - 1153C 贪心

    题意:给出一个由"(",")","?"三种字符构成的序列,让我们把其中的问号替换成左右括号,使得整个序列变成一个完整地括号序列,也就是括号匹 ...

  8. CodeForces - 1089L 贪心

    The kingdom of Lazyland is the home to nn idlers. These idlers are incredibly lazy and create many p ...

  9. Too Many Segments (easy version) CodeForces - 1249D1(贪心+差分)

    题意 给多组线段,而每一个点的覆盖次数不超过K,每次可去除一个线段,问最少去多少线段以及线段的位置. The only difference between easy and hard version ...

  10. Codeforces 360E 贪心 最短路

    题意及思路:https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下,如果第一个人能比第二个人先到,那就缩 ...

最新文章

  1. ORCFILE,ParquetFile,CubeFile使用场景区别
  2. 昆仑mcp文件是什么版本_昆仑健康保2.0升级版怎么样?有哪些优缺点?
  3. numpy(8)-转换维度
  4. [Qt教程] 第46篇 进阶(六) 国际化
  5. 步骤5 - Orchestra从微服务提供商获得结果,再发送回WebSocket服务器
  6. JDK环境变量配置(一次性成功)
  7. 亿嘉和机器人上市了吗_亿嘉和上半年收入持续增长,拟7亿元定增加码主业研发...
  8. 北京林业大学计算机复试难度,北京林业大学考研难吗?一般要什么水平才可以进入?...
  9. JDBC实现从Hive抽取数据导入Oracle
  10. 打砖块游戏c语言设计,打砖块游戏的源代码(请多指教)
  11. list怎么取数据_MongoDB 自动过滤重复数据
  12. python函数作用域_Python命名空间和作用域的基本认识和一点小魔法
  13. linux junit
  14. 1196971406
  15. VScode安装并设置SVN插件
  16. idea简单破解方式
  17. 阿里云服务器安装宝塔流程
  18. STM32使用的相关知识点
  19. 滕州小学计算机教室,东湖教育四十年|滕州小学--小学校 大世界
  20. RMAN Crosscheck/Delete

热门文章

  1. html显示网上图片不显示不出来,网页图片显示不出来,教您网页不显示图片怎么办...
  2. 日记2021/9/28
  3. html输入QQ自动获取QQ头像,代码实现WordPress评论框输入QQ号码自动获取QQ头像和昵称...
  4. Nvidia PhysX 学习文档1: Welcome to PhysX
  5. PartialDependencePlots
  6. 如何下载哔哩哔哩(bilibili)网页端视频
  7. Android怎么实现解压文件,Android如何实现压缩和解压缩文件
  8. processing python mode - 01
  9. 北京立交桥---- “迷桥”经历和不方便后悔
  10. 命令与征服4java攻略_《命令与征服4》全关卡任务流程攻略