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

 

以上是关于HDU6438 Buy and Resell的主要内容,如果未能解决你的问题,请参考以下文章

HDU 6438 Buy and Resell

HDU 6438 Buy and Resell (CCPC网络赛) 堆 贪心

HDU6438:Buy and Resell(贪心+数据结构)

2018中国大学生程序设计竞赛 - 网络选拔赛 hdu6438 Buy and Resell 买入卖出问题 贪心

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

HDU 6438 Buy and Resell ( 2018 CCPC 网络赛 && 贪心 )