链接:HDU - 6438

题意:给出 n ,表示 n 天。给出 n 个数,a[i] 表示第 i 天,物品的价格是多少。每天可以选择买一个物品,或者卖一个已有物品,也可以什么都不做,问最后最大能赚多少钱,最少操作次数是多少?

题解:依次遍历每一天,比如当前是第 i 天,用堆维护前 i - 1 天的最小值,如果最小值比 a[i] 大,直接将 a[i] 加入堆里就可以了,如果日后遇到比 a[i] 大的再更新答案。如果最小值比 a[i] 小,那么就将其卖出,更新答案: 赚的钱 ans += a[i] - min, 操作次数 cnt += 2,但是这样并不能保证答案一定最优的,因为后面可能遇到收购价格更高的那一天,采取的方法是将 min 替换成 a[i],并记录 a[i] 是已经交换过的数,如果日后遇到比 a[i] 大的数 a[j],即遇到更优答案了,就再卖一次 a[i],更新答案,但是注意此时钱更新是没有问题的,但是操作次数就不能累加了,这样相当于min买,a[j]卖。替换后,堆还要再加一次 a[i],因为最优答案里第 i 天也可能是买物品的。相当于pop一个min,push两个a[i]。

#include <bits/stdc++.h>
using namespace std;const double EPS = 1e-6;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 10;
int n;
int a[maxn];
priority_queue<int, vector<int>, greater<int> > Q;
map<int, int> mp;int main()
{int T;scanf("%d", &T);while(T--){scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);while(!Q.empty()) Q.pop(); mp.clear();long long ans = 0, cnt = 0;for(int i = 0; i < n; i++){if(!Q.empty() && Q.top() < a[i]){int x = Q.top(); Q.pop();ans += a[i] - x; cnt++;if(mp[x]){ mp[x]--; cnt--;}Q.push(a[i]); mp[a[i]]++;}Q.push(a[i]);}printf("%lld %lld\n", ans, cnt << 1);}return 0;
}

转载于:https://www.cnblogs.com/chenquanwei/p/9536749.html

HDU - 6438(贪心+思维)相关推荐

  1. Buy and Resell HDU - 6438 贪心

    题目描述: 有一个物品,给你这个物品n天的价格,你可以在在第i天买进或卖出或者什么都不做,如何获得最大利益,假设本金是无限大的. 分析: 我们建立一个最小堆,即优先队列,每天,将队列的最小值和当前的值 ...

  2. 贪心/思维题 UVA 11292 The Dragon of Loowater

    题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...

  3. 1450F The Struggling Contestant(贪心+思维)

    1450F The Struggling Contestant(贪心+思维) Codeforces Global Round 12 F. The Struggling Contestant 题面:Th ...

  4. cf:B. Patchouli‘s Magical Talisman【数学贪心思维 + 奇偶分析】

    分析 给出一堆数 可以通过相加或除2让它们全部变成奇数 如果全奇数返回0 由于奇数 + 偶数 = 奇数 所以只要有一个奇数就能把偶数和它相加不停的变成奇数 所以只要存在奇数,就可以返回偶数的个数 否则 ...

  5. 《C语言程序设计实践》————如何买玫瑰?(贪心思维)

    <C语言程序设计实践>----如何买玫瑰?(贪心思维) 要求:小慧过生日,小明要买玫瑰送她.每枝红玫瑰5元,满5支送1枝,满20枝送5枝.小明一共有n(n>10)元钱,最多能买到多少 ...

  6. HDU - 6438 Buy and Resell(思维+ 贪心)

    题目链接 题意 t组输入,每组n个城市,给出每个城市的货物的价格,在每个城市可以进行三个操作:购买货物,卖出货物,不做操作,问从城市1到城市n(不能返回)最多能获得多少利润,且操作数最少(买和卖分别算 ...

  7. HDU 6438 Buy and Resell【贪心】

    http://acm.hdu.edu.cn/showproblem.php?pid=6438 Problem Description The Power Cube is used as a stash ...

  8. HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)

    题目链接:点击查看 题目大意:给出一棵包含n个节点的树,每个节点都有一个权值,整棵树的根是点1,问从点1开始向下一直走到叶子节点,可以走k次,怎么样走权值和最大,每个节点被走过一次后权值会变为0 题目 ...

  9. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

最新文章

  1. 北航计算机考研 跨考,过来人分享:给外校跨考北航同学的建议
  2. P3357 最长k可重线段集问题(网络流/串联/拆点)
  3. Mysql的undo、redo、bin log分析
  4. 细粒度图像分类_1.1、 图片分类
  5. Mars 如何分布式地执行
  6. java中的显示初始化和特定初始化
  7. 【elasticsearch】Failed Elasticsearch bulk request: request retries exceeded max retry timeout
  8. [jQuery]回到顶部
  9. 浏览器同源与跨域问题总结
  10. 江苏省×××局数据复制软件招标
  11. 小学生计算题生成器的python实现
  12. Java使文本框失去焦点的方法,使文本框失去焦点的事件是()A.ChangeB.FocusC.SetFocusD.LostFocus...
  13. C# 扫描枪扫描条形码与二维码
  14. 育儿心得,所有适龄女青年都该看一下(转)
  15. 【厄舍府的倒塌】超脱
  16. js区分单击双击,双击不会触发单击事件
  17. 虚拟opc服务器软件,OPC Server
  18. 3DSlicer开发之路——Extensions(四)
  19. java毕业设计大学生创业众筹系统mybatis+源码+调试部署+系统+数据库+lw
  20. matlab ccd驱动,CCD常见驱动比较

热门文章

  1. 深入理解java虚拟机之类文件结构以及加载
  2. 小博老师解析Java核心技术 ——JDBC数据库操作类封装
  3. 通过 UDP 发送数据的简单范例
  4. gradle常用命令
  5. ubuntu12.0.4不能正常关机和重启的解决方法
  6. Struts2拦截器的使用
  7. React.js 小书 Lesson14 - 实战分析:评论功能(一)
  8. [转]MySQL innodb buffer pool
  9. 【七招破解WinXP系统访问网络变慢的故障】
  10. ubuntu挂载移动硬盘