题目链接

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 3083    Accepted Submission(s): 1158

Problem Description

The Power Cube is used as a stash of Exotic Power. There are n cities numbered 1,2,…,n where allowed to trade it. The trading price of the Power Cube in the i-th city is ai dollars per cube. Noswal is a foxy businessman and wants to quietly make a fortune by buying and reselling Power Cubes. To avoid being discovered by the police, Noswal will go to the i-th city and choose exactly one of the following three options on the i-th day:
1. spend ai dollars to buy a Power Cube
2. resell a Power Cube and get ai dollars if he has at least one Power Cube
3. do nothing
Obviously, Noswal can own more than one Power Cubes at the same time. After going to the n cities, he will go back home and stay away from the cops. He wants to know the maximum profit he can earn. In the meanwhile, to lower the risks, he wants to minimize the times of trading (include buy and sell) to get the maximum profit. Noswal is a foxy and successful businessman so you can assume that he has infinity money at the beginning.

Input

There are multiple test cases. The first line of input contains a positive integer T (T≤250), indicating the number of test cases. For each test case:
The first line has an integer n. (1≤n≤105)
The second line has n integers a1,a2,…,an where ai means the trading price (buy or sell) of the Power Cube in the i-th city. (1≤ai≤109)
It is guaranteed that the sum of all n is no more than 5×105.

Output

For each case, print one line with two integers —— the maximum profit and the minimum times of trading to get the maximum profit.

Sample Input

3

4

1 2 10 9

5

9 5 9 10 5

2

2 1

Sample Output

16 4

5 2

0 0

Hint

In the first case, he will buy in 1, 2 and resell in 3, 4. profit = - 1 - 2 + 10 + 9 = 16

In the second case, he will buy in 2 and resell in 4. profit = - 5 + 10 = 5

In the third case, he will do nothing and earn nothing. profit = 0


题目大意:

有n座城市,每个城市的商品有一个固定的价格,买和卖都是这个价格。一个人从第1个城市走到第n个城市,每到一个城市可以做三件事情:买一个商品,卖一个商品(如果这个人的身上有商品),什么都不做。求这个人走遍n个城市后,收获利润的最大值。

用了贪心的思想,不过要稍微处理一下。

利润最大肯定是以最低的价格买,以最高的价格卖。利用一个最小堆将沿路的城市的价格记录,如果到达的城市的价格大于最小值,就卖。最小堆里面的数其实都是可以购买商品的价格,每到一个城市都将该城市的价格放入最小堆,这个好理解。但是可能会存在,第一个城市是1,第二个城市是2,第三个城市是3的情况,最优应该是1买3卖,获利2,交易次数2。但是实际上到达第二个城市的时候就会卖掉1。用vis数组标记该价格的商品是否卖过。如果卖过,则需要取消上次交易,因为2只是一个中间量。

价格的范围达到,用普通数组会爆,用map可以解决。虽然范围很大,但是实际上最多不过城市的个数,以后如果范围很大,但是实际数组用到很少的时候可以用map.

priority_queue<int,vector<int>,greater<int> > Q;铭记优先队列的写法,注意最后的> >要有空格分开。


#include <cstdio>
#include <iostream>
#include <vector>
#include <cstring>
#include <map>
#include <queue>
#define ll long long
using namespace std;const int Max = 500010;
int a[Max];
map <int ,int>vis;//map数组可以避免过大的数据
priority_queue<int,vector<int>,greater<int> > Q;//最小堆int main()
{int t,m;scanf("%d",&t);ll ans,time;while(t--){ans = time = 0;vis.clear();scanf("%d",&m);for(int i=0;i<m;i++) scanf("%d",&a[i]);while(!Q.empty()) Q.pop();for(int i=0;i<m;i++){if(!Q.empty()&&Q.top()<a[i]){int x = Q.top(); Q.pop();ans += a[i] - x; time++;if(vis[x]){ //卖了又买的情况vis[x]--;time--;}vis[a[i]]++;Q.push(a[i]);}Q.push(a[i]);}printf("%lld %lld\n",ans,time*2);}return 0;
}

HDU6438-Buy and Resell(贪心、思维题)相关推荐

  1. Buy and Resell(贪心好题!)

    这个贪心可以说是很巧妙了. Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

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

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

  3. hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心

    题目传送门 题目描述: 有n座城市,每座城市都可以对一个物品进行一次的买进或者卖出,可以同时拥有多个物品,计算利润最大值,并且交易次数要最少.(买入卖出算两次操作) 思路: 建立两个小根堆 优先队列, ...

  4. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  5. HDU6438 Buy and Resell 解题报告(一个有趣的贪心问题的严格证明)

    写在前面 此题是一个很容易想到的贪心题目,但是正确性的证明是非常复杂的.然而,目前网上所有题解并未给出本题贪心算法的任何正确性证明,全部仅停留在描述出一个贪心算法.本着对算法与计算机科学的热爱(逃), ...

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

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

  7. HDU6438 Buy and Resell

    题目链接:https://cn.vjudge.net/problem/HDU-6438 知识点: 贪心 题目大意: 本题讨论的是同一种物品的买卖.有 n 天,每一天这种物品都有一个价格.每天可以选择购 ...

  8. ACM思维题训练 Section A

    题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...

  9. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

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

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

最新文章

  1. tp数组转为json_数据存储—JSON
  2. Spark学习之概念了解
  3. jQuery对Table一个字段排序
  4. 不错html5画布效果,可惜网站不需要。亲们,可以看一下~
  5. Elasticsearch如何关掉服务
  6. SAP UI5加载时的library-preload.json文件
  7. print writer保留原有信息写文件_Python读写EXCEL文件常用方法大全 - pythonputao
  8. mysql5.7解压版错误_mysql 5.7 解压版 安装net start mysql 发生系统错误 2
  9. NLP的ImageNet时代已经到来
  10. android打开系统前置摄像头驱动,android 调用系统前置摄像头
  11. Vertx JDBC 批处理
  12. Adobe Edge Animate 1.0-软件内部教程
  13. 周鸿祎:网络安全面前 没有国家可以袖手旁观
  14. C++复习(五)(const、static、inline、引用与指针、new/delete)
  15. vivado中交织模块_Adalm Pluto SDR主动学习模块让您拥有完善的无线电RF射频实验室...
  16. Mybatis源码研究7:缓存的设计和实现
  17. vue dve环境static无法被外部访问_vue中的代理转换机制proxyTable配置项
  18. 遭遇 kapjazy.dll,yhpri.dll,WinSys64.Sys,nwiztlbu.exe,myplayer.com 等1
  19. 技术小咖之基于SDK的第一个windows图形界面程序
  20. 基于局域网的超简易即时通讯软件(一)

热门文章

  1. Python办公自动化 2.1开发环境搭建:PyCharm社区版配置Anaconda开发环境
  2. 摩托罗拉Android系统,摩托罗拉Droid官方Android 2.2系统详细功能展示
  3. 利用java做前端连接数据库_基于java的前端与数据库的交互
  4. 食品科学与工程考研可以考计算机吗,食品科学与工程女汉子,对于考研比较迷茫,有几个问题麻烦各位前辈指点迷津,谢谢 。 - 考研 - 小木虫 - 学术 科研 互动社区...
  5. EtherCAT运动控制器在数控加工手轮随动中的应用之C++
  6. word如何添加下滑线
  7. whatsns与tipask_tipask转whatsns问答系统插件
  8. 最新、最全开心网钓鱼外挂下载_开心网001钓鱼外挂
  9. 从招式与内功谈起——设计模式概述(一)
  10. idea运行maven工程,并且tomcat运行成功,但是仍然是404错误