Three Bags CodeForces - 1467C (贪心)
题目链接
题意:给定三个背包,各自装有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 (贪心)相关推荐
- Three Bags CodeForces - 1467C
题意: 三堆石子,你可以取两堆石子各一个石头a,b.然后消掉a,使得b=b-a再放入b的那一堆.这样操作直到只剩下一个石子,求该石子价值最大. 题解: 构造题 可以构造出两者情况: 其中两堆都是正的, ...
- 贪心 ---- Codeforces Global Round 8,B. Codeforces Subsequences[贪心,贪的乘法原理]
题目链接 给出字符串,统计子串(子串字母可以跳跃)是codeforces的数量. 本题要求,给出子串最少数量k,构造字符串s,要求字符串s包含的字母数量最少,输出这个最少的字符串s. 题目要求是至少有 ...
- CodeForces - 93B(贪心+vectorpairint,double +double 的精度操作
题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...
- Codeforces 985C (贪心)
传送门 题面: C. Liebig's Barrels time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Minimize the Permutation CodeForces - 1256(贪心)
题意: q次询问,每次询问给你长度为n的排列,然后你每次可以选择一个位置i和i+1的数字进行交换.但是每个位置只能交换一次,问你反转若干次后,这个排列最小是多少? 题目: You are given ...
- Minimizing Difference CodeForces - 1244E(贪心题)
题目 题意 官方题解: 百度翻译 思路 ac代码 题意 给出一列数,至多n个操作使其中的数+1或-1,要求得到最小的差值(最大值-最小值): You are given a sequence a1_{ ...
- Serval and Parenthesis Sequence CodeForces - 1153C 贪心
题意:给出一个由"(",")","?"三种字符构成的序列,让我们把其中的问号替换成左右括号,使得整个序列变成一个完整地括号序列,也就是括号匹 ...
- CodeForces - 1089L 贪心
The kingdom of Lazyland is the home to nn idlers. These idlers are incredibly lazy and create many p ...
- Too Many Segments (easy version) CodeForces - 1249D1(贪心+差分)
题意 给多组线段,而每一个点的覆盖次数不超过K,每次可去除一个线段,问最少去多少线段以及线段的位置. The only difference between easy and hard version ...
- Codeforces 360E 贪心 最短路
题意及思路:https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下,如果第一个人能比第二个人先到,那就缩 ...
最新文章
- ORCFILE,ParquetFile,CubeFile使用场景区别
- 昆仑mcp文件是什么版本_昆仑健康保2.0升级版怎么样?有哪些优缺点?
- numpy(8)-转换维度
- [Qt教程] 第46篇 进阶(六) 国际化
- 步骤5 - Orchestra从微服务提供商获得结果,再发送回WebSocket服务器
- JDK环境变量配置(一次性成功)
- 亿嘉和机器人上市了吗_亿嘉和上半年收入持续增长,拟7亿元定增加码主业研发...
- 北京林业大学计算机复试难度,北京林业大学考研难吗?一般要什么水平才可以进入?...
- JDBC实现从Hive抽取数据导入Oracle
- 打砖块游戏c语言设计,打砖块游戏的源代码(请多指教)
- list怎么取数据_MongoDB 自动过滤重复数据
- python函数作用域_Python命名空间和作用域的基本认识和一点小魔法
- linux junit
- 1196971406
- VScode安装并设置SVN插件
- idea简单破解方式
- 阿里云服务器安装宝塔流程
- STM32使用的相关知识点
- 滕州小学计算机教室,东湖教育四十年|滕州小学--小学校 大世界
- RMAN Crosscheck/Delete
热门文章
- html显示网上图片不显示不出来,网页图片显示不出来,教您网页不显示图片怎么办...
- 日记2021/9/28
- html输入QQ自动获取QQ头像,代码实现WordPress评论框输入QQ号码自动获取QQ头像和昵称...
- Nvidia PhysX 学习文档1: Welcome to PhysX
- PartialDependencePlots
- 如何下载哔哩哔哩(bilibili)网页端视频
- Android怎么实现解压文件,Android如何实现压缩和解压缩文件
- processing python mode - 01
- 北京立交桥---- “迷桥”经历和不方便后悔
- 命令与征服4java攻略_《命令与征服4》全关卡任务流程攻略