传送门

按理说想到转化问题之后就不难了吧,可是我还是不会写
一个很容易想到的转化就是差分,将银币数和铜币数都减去金币数,这样就转化为\(x+y+z\)个钱币选\(y\)个银币和\(z\)个铜币的最大数量了
然后我这个菜逼就不会做了
设总钱币数为\(n\),银币\(x[i]\)个,铜币\(y[i]\)个,就可以按\(x[i]-y[i]\)排序
然后很显然的就是一定是前\(k\)个选银币,后\(n-k\)个选铜币(显而易见的贪心)
枚举\(k\),用一个堆来维护就好了
代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
void read(int &x){char ch;bool ok;for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;
}
#define rg register
const int maxn=1e5+10;
int x,y,z,n;long long ans,sum[maxn],num;
struct oo{int x,y;}a[maxn];
bool cmp(oo a,oo b){return a.x-a.y<b.x-b.y;}
priority_queue<int,vector<int>,greater<int> >q;
int main(){read(x),read(y),read(z),n=x+y+z;for(rg int i=1,u,v,w;i<=n;i++){read(u),read(v),read(w);num+=u,v-=u,w-=u;a[i].x=v,a[i].y=w;}sort(a+1,a+n+1,cmp);long long now=0;for(rg int i=1;i<=z;i++)now+=a[i].y,q.push(a[i].y);for(rg int i=z+1;i<=n;i++){sum[i-1]=now,q.push(a[i].y);now+=a[i].y,now-=q.top();q.pop();}sum[n]=now;while(!q.empty())q.pop();now=0;for(rg int i=n;i>=n-y+1;i--)now+=a[i].x,q.push(a[i].x);for(rg int i=n-y;i>=z;i--){ans=max(ans,now+sum[i]+num),q.push(a[i].x);now+=a[i].x,now-=q.top();q.pop();}printf("%lld\n",ans);
}

转载于:https://www.cnblogs.com/lcxer/p/10723700.html

AT2672 Coins相关推荐

  1. LeetCode刷题记录5——441. Arranging Coins(easy)

    LeetCode刷题记录5--441. Arranging Coins(easy) 目录 LeetCode刷题记录5--441. Arranging Coins(easy) 题目 语言 思路 后记 题 ...

  2. PAT甲级1048 Find Coins :[C++题解]哈希表、两个硬币之和为定值

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题意:找两个数,和为定值. 分析:本题在各大OJ上几乎都有, 反正在Leetcode上做过.本题有两种常见的解法,一种是双指针,另一种是用哈 ...

  3. PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:m是背包容量,a1,a2,....,ana_1,a_2,....,a_na1​,a2​,....,an​是n个物品,第i个物品的体积是 ...

  4. 北邮OJ 2016 网预-Square Coins

    时间限制 1000 ms 内存限制 65536 KB 题目描述 Artoria, also known as Saber-chan, was born into a time of chaos and ...

  5. HDOJ 1398 Square Coins

    母函数"第一季",无压力AC~ View Code 1 //#include <fstream> 2 #include <iostream> 3 using ...

  6. 【PAT甲级】1048 Find Coins (25 分) C++ 全部AC

    题目 给你一个sum,以及拥有的钱 让你找出一个组合,正好用两张钱付清sum,注意如果有多个结果,输出其中最小的 这道题注意稍微优化一下算法,要不然卡在测试点3,4 我是用二重循环过了的,只要注意输入 ...

  7. 【最简解法】1048 Find Coins (25 分)_18行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Eva loves to collect coins from all over the universe, including ...

  8. Coins POJ - 1742(多重背包+是否装满问题)

    题意: 给定n种面值的硬币面值分别为WiW_{i}Wi​个数为CiC_{i}Ci​,问用这些硬币可以组成1~m之间的多少面值. 题目: People in Silverland use coins.T ...

  9. POJ1742 Coins(DP)

    Coins 思路 没分析复杂度写了个二进制拆分,然后做010101背包O(nlog(c)m)>10e7了O(nlog(c)m) > 10e7了O(nlog(c)m)>10e7了,所以 ...

最新文章

  1. ES6 Proxy 性能之我见
  2. 我的Python分析成长之路4
  3. java中Class.getResource用法(用于配置文件的读取)
  4. 前向渲染路径细节 Forward Rendering Path Details
  5. (详解)你应该知道的new操作符
  6. epoll nio区别_【总结】两种 NIO 实现:Selector 与 Epoll
  7. 技术这东西,不可不看,不可全看.
  8. 【LeetCode笔记】54. 螺旋矩阵(Java、迭代、递归)
  9. 如何从 0 到 1,搭建一个完整的 Kubernetes 集群?
  10. 《三体》动画版官宣!B站出品 刘慈欣“倒吸一口凉气”
  11. 风控人必知必会的征信知识
  12. 如何消除Windows 7中的搜索记录
  13. Android ListView中EditView再次焦点获取
  14. python画立体心形折纸图解_立体的心形盒子的折纸图解过程
  15. 掌财社昆仑:期货升水和期货贴水是什么意思?
  16. 【pandas】结合泰坦尼克生还分析讲讲pandas常用基础操作
  17. 微信小程序画布canvas制作海报图片清晰度过低
  18. java hypot_Java StrictMath hypot()用法及代码示例
  19. C对接国际验证码接口DEMO示例
  20. requests发送post请求到金山翻译

热门文章

  1. CommandBehavior.CloseConnection的使用
  2. 读spring源码(一)-ClassPathXmlApplicationContext-初始化
  3. Coolpad Y1刷机方法
  4. const在c中的用法
  5. 项目管理(五)- 风险检测表
  6. iOS 里面如何使用第三方应用程序打开自己的文件,调用wps其他应用打开当前应用里面的的ppt doc xls...
  7. 使用政府开放数据和低代码方案构建应用
  8. iOS 调用h5页面 视频不自动播放的问题
  9. 集群监控系统的设计方案
  10. JavaScript 中遍历对象的属性