HDU6438 Buy and Resell
题目链接: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相关推荐
- hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
题目传送门 题目描述: 有n座城市,每座城市都可以对一个物品进行一次的买进或者卖出,可以同时拥有多个物品,计算利润最大值,并且交易次数要最少.(买入卖出算两次操作) 思路: 建立两个小根堆 优先队列, ...
- HDU6438 Buy and Resell 解题报告(一个有趣的贪心问题的严格证明)
写在前面 此题是一个很容易想到的贪心题目,但是正确性的证明是非常复杂的.然而,目前网上所有题解并未给出本题贪心算法的任何正确性证明,全部仅停留在描述出一个贪心算法.本着对算法与计算机科学的热爱(逃), ...
- Buy and Resell
题目链接: Buy and Resell 大致题意: 有n个城市, 在每个城市中你可以选择花费a[i]的价格买一个能量块, 也可以选择以a[i]的价格卖出一个能量块(前提是你要有能量块可以卖). 你会 ...
- Buy and Resell(贪心好题!)
这个贪心可以说是很巧妙了. Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- HDU6348 Buy and Resell
Bryce1010模板 HDU6348 Buy and Resell 题意: 从前往后开始旅游,在每个村庄可以选择三个操作: (1)买入物品 (2)卖出物品 (3)不买不卖 求最后的最大获益. 思路: ...
- 2018中国大学生程序设计竞赛 – 网络选拔赛 1001 Buy and Resell [模拟]
1001 Buy and Resell 题目:有1-n个货物,可以在某个点buy,然后在后面的点resell,可以同时买多个,问最大的利润和最小的交易次数. 题解:模拟运算,前 i 天都是可以买的, ...
- Buy and Resell hdu-6438 贪心 优先队列
题目链接:Problem - 6438 题面: 题意:你按顺序去n个城市,每个城市商品买入和卖出的价格一样,你可以用一天时间买入或者卖出,问最多可以获取多少钱,已经最少的天数 思路:在每个位置处贪心寻 ...
- 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 ...
- HDU 6438 Buy and Resell【贪心】
http://acm.hdu.edu.cn/showproblem.php?pid=6438 Problem Description The Power Cube is used as a stash ...
最新文章
- 什么是ownership?
- 安谋中国发布“玲珑”i3i5 ISP处理器,剑指何方?
- 程序猿崛起——Growth Hacker
- linux下的getopts
- (转)MyBatis框架的学习(三)——Dao层开发方法
- 关于armhf (hard-float ABI for ARM)
- linux共享内存 dest,关于linux 共享内存查看已经完整释放
- LDA算法原理及LDA与PCA的比较
- postman控制台打印数据
- 招聘数据采集+Hive数据分析+数据可视化
- python battleship_Python 入门教程 12 ---- Battleship!-阿里云开发者社区
- 360全景倒车影像怎么看_360全景影像怎么看
- 健康系列——如何增强免疫力
- 使用TIMESTAMPDIFF计算两个时间戳之间的时间间隔需要注意的细节
- 将C语言的字符串转为OC的字符串
- java反转字符串的方法
- Failed to load resource: the server responded with a status of 416 (Requested Range Not Satisfiable)
- 新年寄语 给自己吧
- 谈谈网银和USB Key
- 如何解决Visual Studio2010 编译时提示系统找不到指定文件问题