AT2672 Coins
传送门
按理说想到转化问题之后就不难了吧,可是我还是不会写
一个很容易想到的转化就是差分,将银币数和铜币数都减去金币数,这样就转化为\(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);
}
AT2672 Coins的更多相关文章
- [LeetCode] Arranging Coins 排列硬币
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力
Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS Memory Limit:65536KB 64bit IO Fo ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
- csuoj 1119: Collecting Coins
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec Memo ...
- Coins
Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ...
- hdu 1398 Square Coins (母函数)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- POJ3260The Fewest Coins[背包]
The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ...
- POJ1742 Coins[多重背包可行性]
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34814 Accepted: 11828 Descripti ...
随机推荐
- inux命令学习笔记(13):less 命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大. less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面 ...
- vc++ 访问php webService
之前做了一个VC++访问c#制作的WebService,没有问题,接着我又做了一个VC++访问php制作的WebService ,结果老是出现Client错误.这个php WebService是用Ze ...
- 如何使用ODB(How to use odb On windows)
1.下载ODB library:ODB Compiler,Common Runtime Library,Database Runtime Library. http://www.codesynthes ...
- 3 K8s安裝ELK+filebeat
1 Filebeat: apiVersion: v1 kind: Service metadata: name: XX spec: ports: - name: http port: targetPo ...
- maven可用镜像
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...
- ParentViewController中添加SubViewController(IOS学习)
我是用的是Container.addSubView的方法. 1. ParentViewController.m的@interface()中添加2个子vc的实例变量,代码如下 @property (no ...
- [tyvj1860]后缀数组
题目链接:http://www.tyvj.cn/p/1860 解题关键:模板题.贴一个代码详解 http://www.cnblogs.com/staginner/archive/2012/02/02/ ...
- SpringBoot04 项目热部署详解
1 热部署 优点:适用于本地和线上.无需重启服务器 2 热部署和热加载的联系和区别 2.1 联系 不用重启服务器就可以编译和部署项目 都是基于Java的类加载器实现 2.2 字面区别 热部署在服务器运 ...
- 34、NCBI的子库名称
转载:http://fhqdddddd.blog.163.com/blog/static/1869915420107188527933/ 参考资料: http://www.ncbi.nlm.nih.g ...
- 阿里云OSS安装使用问题
最近一政府客户需要将系统部署到政务网(阿里云,不能连接外网),需要挂载OSSFS,通过官网文档,基本可以按流程完成安装,但是安装过程中遇到的几个问题需要了解一下. 服务器级OSS信息 系统:CentO ...