题目链接:https://cn.vjudge.net/problem/HDU-6438

知识点:  贪心

题目大意:

  本题讨论的是同一种物品的买卖。有 n 天,每一天这种物品都有一个价格。每天可以选择购买一个物品,或者出售一个已有的物品,或者什么都不做。问最后最多能赚多少钱,并且在赚最多钱的前提下的最少操作次数是多少?

解题思路:

  Talk is cheap, show me the code.

AC代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 priority_queue<LL,vector<LL>,greater<LL> > buy;//小顶堆记录能够购买物品的价格
 5 map<LL,int> sell;//记录用各个售价出售了多少件物品
 6
 7 int main(){
 8     int n,t;
 9     scanf("%d",&t);
10     while(t--){
11         LL profit=0;//总收益
12         int times=0;//交易次数
13
14         //初始化
15         while(!buy.empty()) buy.pop();
16         sell.clear();
17
18         scanf("%d",&n);
19         for(int i=0;i<n;i++){//遍历每一天的价格
20             LL cost;
21             scanf("%lld",&cost);
22             if(!buy.empty()&&buy.top()<cost){//如果该天的价格小于buy堆顶的价格
23                 LL temp=buy.top();
24                 buy.pop();
25                 profit+=cost-temp;//更新总收益
26                 times+=2;//更新交易次数
27
28                 if(sell[temp]){
29     //如果曾经用目前的这个买入价卖出过物品,那么之前的这个卖出就是没有意义的,把当时的那次
30     //卖出操作抹去,把物品留到现在再卖,总收益是一样的,不过这样可以省下一次卖出操作和一次
31     //买入操作。
32                     times-=2;
33                     buy.push(temp);//抹去曾经的那次买入操作
34                     sell[temp]--;  //抹去曾经的那次卖出操作
35                 }
36                 sell[cost]++;//更新sell
37             }
38             buy.push(cost);//更新buy
39         }
40         cout<<profit<<" "<<times<<endl;
41     }
42
43     return 0;
44 }

转载于:https://www.cnblogs.com/Blogggggg/p/9567290.html

HDU6438 Buy and Resell相关推荐

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

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

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

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

  3. Buy and Resell

    题目链接: Buy and Resell 大致题意: 有n个城市, 在每个城市中你可以选择花费a[i]的价格买一个能量块, 也可以选择以a[i]的价格卖出一个能量块(前提是你要有能量块可以卖). 你会 ...

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

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

  5. HDU6348 Buy and Resell

    Bryce1010模板 HDU6348 Buy and Resell 题意: 从前往后开始旅游,在每个村庄可以选择三个操作: (1)买入物品 (2)卖出物品 (3)不买不卖 求最后的最大获益. 思路: ...

  6. 2018中国大学生程序设计竞赛 – 网络选拔赛 1001 Buy and Resell [模拟]

    1001 Buy and Resell  题目:有1-n个货物,可以在某个点buy,然后在后面的点resell,可以同时买多个,问最大的利润和最小的交易次数. 题解:模拟运算,前 i 天都是可以买的, ...

  7. Buy and Resell hdu-6438 贪心 优先队列

    题目链接:Problem - 6438 题面: 题意:你按顺序去n个城市,每个城市商品买入和卖出的价格一样,你可以用一天时间买入或者卖出,问最多可以获取多少钱,已经最少的天数 思路:在每个位置处贪心寻 ...

  8. Buy and Resell HDU - 6438(补)更新贪心

    The Power Cube is used as a stash of Exotic Power. There are nn cities numbered 1,2,-,n1,2,-,n where ...

  9. HDU 6438 Buy and Resell【贪心】

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

最新文章

  1. 什么是ownership?
  2. 安谋中国发布“玲珑”i3i5 ISP处理器,剑指何方?
  3. 程序猿崛起——Growth Hacker
  4. linux下的getopts
  5. (转)MyBatis框架的学习(三)——Dao层开发方法
  6. 关于armhf (hard-float ABI for ARM)
  7. linux共享内存 dest,关于linux 共享内存查看已经完整释放
  8. LDA算法原理及LDA与PCA的比较
  9. postman控制台打印数据
  10. 招聘数据采集+Hive数据分析+数据可视化
  11. python battleship_Python 入门教程 12 ---- Battleship!-阿里云开发者社区
  12. 360全景倒车影像怎么看_360全景影像怎么看
  13. 健康系列——如何增强免疫力
  14. 使用TIMESTAMPDIFF计算两个时间戳之间的时间间隔需要注意的细节
  15. 将C语言的字符串转为OC的字符串
  16. java反转字符串的方法
  17. Failed to load resource: the server responded with a status of 416 (Requested Range Not Satisfiable)
  18. 新年寄语 给自己吧
  19. 谈谈网银和USB Key
  20. 如何解决Visual Studio2010 编译时提示系统找不到指定文件问题

热门文章

  1. 学习笔记:清华慕课——数据结构(1)
  2. 腾讯地图踩坑记之选点组件
  3. 用Python在图片上添加文字
  4. SpringMVC中的拦截器介绍
  5. RocketMQ——顺序消费(代码)
  6. 解决web系统session劫持
  7. 比我的脸还干的gan货——Python Flask Web 框架入门
  8. 测试用例设计—场景分析法
  9. [JLOI2008]将军
  10. 网络攻防技术(摆烂一天)