HDU6438 Buy and Resell
Posted solvit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU6438 Buy and Resell相关的知识,希望对你有一定的参考价值。
HDU6438 Buy and Resell
比较经典的贪心问题了
爬山 or 堆 ?
#include <bits/stdc++.h> using namespace std; const int maxn = 100005; typedef long long ll; struct goods { int f,cost; goods(){}; goods(int _f,int _cost) { f = _f;cost = _cost; } bool operator < (const goods & _goods)const { if(cost == _goods.cost){ return f < _goods.f; } return cost < _goods.cost; } }a[maxn]; int t,n; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i].cost); } priority_queue<goods>q; while(!q.empty())q.pop(); ll ans = 0,sum = 0; q.push(goods(0,a[n].cost)); for(int i=n-1;i>=1;i--) { if(a[i].cost < q.top().cost){ if(q.top().f == 0) { sum += 2; ans += (q.top().cost-a[i].cost); q.pop(); q.push(goods(1,a[i].cost)); } else{ ans += (q.top().cost-a[i].cost); int ta = q.top().cost; q.pop(); q.push(goods(1,a[i].cost)); q.push(goods(0,ta)); } } else { q.push(goods(0,a[i].cost)); } //cout<<"i: "<<ans<<" "<<sum<<endl; } cout<<ans<<" "<<sum<<endl; } return 0; }
以上是关于HDU6438 Buy and Resell的主要内容,如果未能解决你的问题,请参考以下文章
HDU 6438 Buy and Resell (CCPC网络赛) 堆 贪心
HDU6438:Buy and Resell(贪心+数据结构)
2018中国大学生程序设计竞赛 - 网络选拔赛 hdu6438 Buy and Resell 买入卖出问题 贪心