题意:

三堆石子,你可以取两堆石子各一个石头a,b。然后消掉a,使得b=b-a再放入b的那一堆。这样操作直到只剩下一个石子,求该石子价值最大。

题解:

构造题
可以构造出两者情况:

  1. 其中两堆都是正的,一堆都是负的
  2. 一个背包都是正的,另两个背包的最小值是负的,其他都是正的
    为什么是这样构造出来的呢?
    参考题解
    对于一个数如果进行奇数次操作,那么就是负贡献,偶数次操作就是正贡献
    假设最后一个数在数组a,那么a中剩下n-1个数,可以在最后先与其他数组合并,再和最后一个数合并,这样就都是正贡献。同理应用到b和c数组,就相当于b,c中只有一个数的负贡献,其他都是正,我们取b,c中最小的为负贡献
    或者我们直接选b,c中一个数组为正数组,另一个为负数组

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxn = 300010;int n1, n2, n3;
ll a[maxn], b[maxn], c[maxn];
ll s1, s2, s3;
ll m1, m2, m3;ll ans = 0;ll read(){ ll s = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); } return s * f; }int main(){n1 = read(), n2 = read(), n3 = read();for(int i = 1 ; i <= n1 ; ++i) a[i] = read(), s1 += a[i];for(int i = 1 ; i <= n2 ; ++i) b[i] = read(), s2 += b[i];for(int i = 1 ; i <= n3 ; ++i) c[i] = read(), s3 += c[i];ans = -1e18;ans = max(ans, s1 + s2 - s3); ans = max(ans, s2 + s3 - s1);ans = max(ans, s3 + s1 - s2);m1 = a[1], m2 = b[1], m3 = c[1];for(int i = 2 ; i <= n1 ; ++i) m1 = min(m1, a[i]);for(int i = 2 ; i <= n2 ; ++i) m2 = min(m2, b[i]);for(int i = 2 ; i <= n3 ; ++i) m3 = min(m3, c[i]);ans = max(ans, s1 + s2 + s3 - 2 * m1 - 2 * m2);ans = max(ans, s1 + s2 + s3 - 2 * m1 - 2 * m3);ans = max(ans, s1 + s2 + s3 - 2 * m2 - 2 * m3);printf("%lld\n", ans);return 0;
}

Three Bags CodeForces - 1467C相关推荐

  1. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)

    [题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...

  2. Codeforces Round #695(Div. 2)

    Codeforces Round #695 (Div. 2) 1467A Wizard of Orz 1467B Hills And Valleys 1467C Three Bags 1467D Su ...

  3. Codeforces Round #695 (Div. 2)ABCD题解详析

    A. Wizard of Orz 首先保证第一块板子是999,那么第二块板子不可能是999,那么令第二块板子为888 只要在第二块板到达888的时候按下暂停,那么第一块是999,第三块板子也是999 ...

  4. 【Codeforces】A3组刷题记录( 43 / 43 )

    目录 A1. Combination Lock A2. Summer Camp rzt A3. Soft Drinking ★A4. Coder ★A5. GukiZ and Contest ★A6. ...

  5. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  6. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  7. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  8. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  9. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

最新文章

  1. 基于K-gram的winnowing特征提取剽窃查重检测技术(概念篇)
  2. tomcat关闭 异常报告
  3. 手动安装K8s第六节:node节点部署-kubelet
  4. linux环境c语言实现who,C语言编程实现Linux命令——who
  5. [原]CUDA中grid、block、thread、warp与SM、SP的关系
  6. 完成AOP 顶层设计-CglibAopProxy
  7. 推荐.neter常用优秀开源项目系列之二
  8. postman 请求参数为数组及JsonObject
  9. C/C++编译器教程之如何安装vs,看了的人应该都会装,只要不手残
  10. 手写数字识别 随机森林 代码
  11. 小米崔宝秋:小米 AIoT 深度拥抱开源
  12. 一些老程序员不错的经验分享
  13. java response 输出word_java导出数据到word(一)
  14. python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
  15. 滑动门套滑动门css,CSS选项卡、滑动门代码
  16. MIKE与SMS网格的区别——个人感受
  17. excel使用教程_Excel教程大合集:史上最全面的Excel视频教程合集+模板,免费送...
  18. Mon Dec 31 00:00:00 CST 2012格式的字符串转时间格式
  19. vue form表单数据提交
  20. JavaScript-修炼之路第五层

热门文章

  1. 为什么老师批改完试卷,分数下要画两条横线?今天终于知道了!
  2. 老婆晚上不想睡?这个操作你要会!
  3. jquery如何实现ajax技术,使用JavaScript和jQuery简单实现Ajax技术(示例代码)
  4. Android jdwp 自动断开,开启debug调试模式,进入不了,等一会就闪退了!!!!
  5. java基本类型与引用数据类型_java基本数据类型与引用数据类型总结
  6. mysql数据库已连接数据库_001. 【已解决】Java连接MYSQL 数据库的连接步骤
  7. php大数组查找算法,PHP简单的数组查找算法分享
  8. HTML阅读位置,script在HTML文档中位置
  9. java 验证登陆_java登陆界面验证
  10. mysql 8 配置参数优化_mysql8 参考手册--配置非持久性优化器统计参数