1. 程式人生 > >HDU6438 Buy and Resell

HDU6438 Buy and Resell

gif -a 經典的 type per spl pid goods empty

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; }
View Code

HDU6438 Buy and Resell