hdu 6438 Buy and Resell 优先队列贪心+思维

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉 本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6438

 

k值为是否已经卖出的标记,若k=1,说明在该天曾经卖出一件物品。然而因为从a买入,从b卖出,再从b买入,从c卖出和从a买入,从c卖出的结果是一样的。所以定义k值用来更新买卖的最优值。在优先队列中,如果两元素w值(当天价值)相同,则优先取k较大的元素。

优先队列存储每一天的价格,贪心对于第i天的价格,取前i-1天最小的价格与之比较。若比当前值大,就直接将a【i】加入优先队列(堆)中。否则弹出队首元素,答案加上a【i】-前i-1天的最小值。接下来向优先队列中加入两个a【i】,k值分别为0和1。应为排序时k大的排在前面,所以不用担心“从a买入,从b卖出,再从b买入,从c卖出”会被计算两次的情况。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define mod 1000000007
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;

LL a[100010];

struct node
{
    LL w;
    int k;
};


    bool operator <(node a,node b)
    {
        if(a.w==b.w)
            return a.k<b.k;
        return a.w>b.w;
    }


int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        priority_queue <node> run;
        memset(a,0,sizeof a);
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        LL ans=0,id=0;
        for(int i=1;i<=n;i++)
        {
            node a1;
            a1.w=a[i];
            a1.k=0;
            if(run.empty())
            {
                run.push(a1);
                continue;
            }
            //printf("w=%lld k=%d\n",run.top().w,run.top().k);
            if(run.top().w>=a[i])
                run.push(a1);
            else
            {
                node tem=run.top();
                run.pop();
                node temp;
                temp.w=a[i];
                temp.k=1;
                if(tem.k==1)
                {
                    run.push(temp);
                    temp.k=0;
                    run.push(temp);
                    ans+=a[i]-tem.w;
                }
                else
                {
                    run.push(temp);
                    temp.k=0;
                    run.push(temp);
                    ans+=a[i]-tem.w;
                    id+=2;
                }
            }
        }
        printf("%lld %lld\n",ans,id);
    }
    return 0;
}

 

Open3D 使用CPD算法对点云配准【2025最新版】 Coherent Point Drift相干点漂移算法实现点云配准(python代码)博客长期更新,本文最近更新时间为:2025年2月2日。 阅读详情

相关推荐

SAP PP工艺路线Routing保姆级配置指南:从CA01创建到替代/并行顺序实战

本文详细解析SAP PP模块中工艺路线(Routing)的配置与应用,从基础创建(CA01)到高级功能如替代顺序和并行顺序的实战操作。通过真实案例演示,帮助用户掌握SAP PP工艺路线的精细化管理,提升生产流程效率。

weixin_30898555的博客 388

HDU 6438 Buy and Resell 【贪心+思维+优先队列】

传送门:HDU 6438 Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description The Power Cube is used as a stash of Exotic Power. There are n c...

Waiting For You 316

LVGL与STM32的理解(基于正点原子资料)

我们要在lcd_draw_fast_rgb_color里面实现对屏的具体操作(也就是在这里实现自己的代码)。lcd_set_window、lcd_write_ram_prepare、lcd_wr_data这三个函数是本例程LCD屏的控制函数(也就是自己写的函数)。以下是stm32工程的文件目录,GUI_APP也可以忽略(细节参考正点原子例程):这里主要是再次加强一下印象,主要就是把。,里面的lcd_init()与lcd_display_dir是。它们都是LVGL的接口,按照它们的需求,把内容给它们即可。

weixin_39257775的博客 3437

HDU 6438 Buy and Resell(思维,贪心,最小堆)

HDU 6438 Buy and Resell 题目 给 n 个城市物品价格,每个地方的物品价格不一样。低买高卖就可以赚差价。 从1 ~ n,每经过一个城市可以选择以当前城市价格买进一个商品,也可以以当前城市价格卖掉手中的一个商品。还可以选择什么都不干直接走。问最后能赚的最大利润是多少。 分析 贪心,不过思路很巧妙。 ans 代表最后利润,cnt 代表操作数,这里标记买进操作,最后输出 2 * c...

Stormjing的博客 251

版电力系统故障录波_故障录波识图与典型故障波形分析

1、设置故障录波的目的故障录波装置是对电力系统运行状况进行监控的一种自动化设备。系统正常运行时,录波装置不启动录波,当系统发生故障时,通过启动录波装置迅速启动录波器录波,直接记录反应故障装置安装处系统故障的电气量。2、故障录波的作用(1)正确评价继电保护和自动装置的工作。(2)正确分析事故的原因并研究防止对侧。(3)发现继电保护和自动装置缺陷。(4)发现一次设备缺陷,及时消除隐患。(5)帮助寻找故...

weixin_42495661的博客 1万+

关于无障碍适配的笔记

针对无障碍兼容性的笔记,针对wcg2.0/2.1

CoffeeAndIce的博客 4213

HDU - 6438 Buy and Resell(思维+ 贪心)

题目链接 题意 t组输入,每组n个城市,给出每个城市的货物的价格,在每个城市可以进行三个操作:购买货物,卖出货物,不做操作,问从城市1到城市n(不能返回)最多能获得多少利润,且操作数最少(买和卖分别算一次操作)。 思路 首先,对于 1 2 10,我们可以这样考虑:在1号城市买入,在2号城市卖出,利润为2-1 = 1,但是我们发现3号城市利润更高,所以在2号城市的时候我们假装买入一份价格为2的货物,然后在3号卖出,重述一次整个过程:城市1买入(-1),城市2卖出(-1+2),城市二买入(-1+2-2),城市三

Here_SDUT的博客 249

一分钟了解 “提示词工程”、“上下文工程”、“驾驭工程”

在大模型刚刚进入大众视野的初期,开发者面临的最大挑战是如何让模型听懂人类的指令。这一阶段被称为提示词工程时代。其核心思想非常直观:通过精心设计输入的文本提示,引导模型输出符合预期的结果。这一时期的开发者更像是“提示词巫师”,他们热衷于寻找所谓的“魔法咒语”。典型的技巧包括角色设定、思维链、少样本学习以及输出格式约束。例如,仅仅在问题前加上一句“请一步步思考”,模型的推理能力往往就能得到显著提升。然而,随着应用场景的复杂化,提示词工程的局限性逐渐暴露。

h a 6 6 6 c k 为 你解决复杂难题! 568

HDU6438 Buy and Resell

优先队列 + 思维 首先有一个很自然的贪心策略就是在价格便宜的地方买入,在价格贵地方卖出,而且差值越大越好。 关键是在什么时候卖。 其实对于这种买入和卖出价格一样的情况,中间商是没有差价的。 拿 1,2,10来说,我们用在2处卖出1,得到利润1,这时如果我们把2当成中间商,在10把我们从1买来的商品卖出,得到的利润是1+8=9。 这和我们在3处卖处1的利润是一样的。 所以我们可以用最小堆维护当前最...

weixin_30830327的博客 78

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值)【含Matlab源码 4887期】

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值) 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 810

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 136

hdu6438 Buy and Resell(思维题/反悔贪心)

题目 给你长为n的数列a[],ai代表第i天的物价 第i天你可以选择三个操作其一: ①卖掉一个你已有的方块,收益为ai ②买一个方块,花费为ai ③什么都不做 n天后,问最大收益和最小操作次数 思路来源 https://www.cnblogs.com/chenquanwei/p/9536749.html 题解 只在卖的时候计算收益,买的时候不算损失 考虑一个单增序列,2 3 ...

小衣同学的博客 371

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1754

hdu 6438-Buy and Resell 贪心+思维

  Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 945    Accepted Submission(s): 278   Problem Description ...

人生如戏 362

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

hdu 6447YJJ's Salesman 离散化+树状数组+DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 因为图中点的坐标值过大,达到1e9.然而只有1e5个点。所以先将其离散化。并按照&lt;x.y&gt;二元组排序。每次对于同一行的点连续处理两次。 第一次:先考虑由上一行转移而来的情况:树状数组找到左上角的最大值+v、以及上方值的最大值。 第二次:考虑由同行的点转移来的情况。树状数组查询区...

大乐的博客 740

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

zoj 4029 2018浙江省赛F Now Loading!!!

题目链接:zoj 4029用n^2不现实,考虑到某些数字对于用一个p的log值相等,所以可用二分解决用到了c++的upper_bound,找到比当前值大的第一个数字在数组中的位置,然后一个前缀数组算出分子的和#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;vector&gt; #include&lt;set&gt; #incl...

大乐的博客 623

codeforce 991E (组合数递归搜索)

题目链接:点击打开链接给出小明在迷糊的时候看到的车牌号数字,和真实数字相比:①真实出现的数字,小明都看到了②小明只可能把同一个数字看多,不可能看少③车牌号没有前导零问真实的数字有可能有多少种情况先把每个数字出现的次数记录下来,这就是在搜索时每个数字取到的上限从0到9遍历(相当于10层循环,在这里用递归的方式实现,每层循环的遍历次数即为该层数字出现的次数,代表取多少个这个数)在最后一层统计用当前这些...

大乐的博客 545

CF 1091D

有两种子串能达到n*(n+1)/2,一种是n的全排列,有n个 另一种是分段的,一段在前面的排列里,一段在后面的排列里。只要保证在前面排列里的序列不是完全倒着的就可以计入贡献。 要用lucas计算组合数   #include&lt;bits/stdc++.h&gt; #define mod 998244353 using namespace std; long long a[1000...

大乐的博客 519

hdu 6435 CSGO 曼哈顿距离性质

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6435 你有n把主武器,m把副武器。现在你要各选一把。每把武器有一个基础能力值和k各参数。你需要使你的两把武器的基础值之和加各个能力值的绝对值之和最大。 先只考虑能力值:如|a1-b1|+|a2-b2|+|a3-b3|约掉绝对值之后根据a1~a3和b1~b3的值,原式的每个数字的符号有2^3种可能性...

大乐的博客 507

codeforces 1059B Forgery 暴力

题目链接:http://codeforces.com/problemset/problem/1059/B 给你一个印章,能印出形为 ### #.# ### 的图案,#代表墨水,.代表空。给定图案问是否能用这个印章印出目标图案 遍历图中每一个点,检查以每一个s[i][j]为中心点时是否能盖下印章,如果以其为中心点,四周的八个点有‘.’或者超出边界,则不能以其为中心点盖章,遍历整个图吧能盖...

大乐的博客 499

Codeforces Round#502 (Div1+Div2)D. The Wu

因为每个询问的k足够小(小于100),考虑将k变为答案的一维,然后可行状态最多有2^12个,所以最终答案的数组可以开成【4096】【100】。因为是小于等于k的个数,所以用前缀和求解比较方便。预处理数组p【4096】【4096】代表ij状态的Wu值,pre【i】【j】代表i状态k=j时s集合中与j状态的Wu值小于等于k的串的数量 太弱了自己 #include&lt;bits/stdc++.h...

大乐的博客 460

hdu 6408 From ICPC to ACM贪心模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6408 刚刚到学校火车坐的想死。。 拜读了大佬的代码,有两个思路上的新理解吧。。 1、还是降维吧,给了一个材料费用一个组装费用。将第i天最小的材料费用计算出来。本来想的是要n^2去计算,后来发现只要和前一天进行比对即可,因为两天如果材料来源相同,差别只在于i-1到i天的存储费用 2、计算某天某材...

大乐的博客 453

hdu 6406

好歹是过了。。。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 不知道用dp是怎么做的 思路上最大的亮点就是找出从i到n的数中第一个大于k的数字。 考虑将第p个数改为q。分为前后两边考虑 前面: 预处理出b【i】代表前i个数能取走多少个数,再维护一下前i个数的最大值。如果前k-1个数的最大值小于q,这部分对答案的贡献就是b【...

大乐的博客 449

hdu 6357 Hills And Valleys思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6357 将枚举【i,j】区间化为枚举值域,原问题转化为两串的最长公共子序列问题,其中构造串可以重复的匹配 #include&lt;bits/stdc++.h&gt; #define mod 1000000007 #define For(i,m,n) for(int i=m;i&lt;=n;i++)...

大乐的博客 407

Codeforce 981D 贪心+dp

题目链接:点击打开链接本题目能简单的以dpij为前i段到第j个的最大值来dp,不满足最优子结构性质。因为最大的数有50位,可以进行60轮次动态规划,看最后的解能否达到这一轮的ans,如果不能达到,则去掉本轮新增的1位。因为位数是在上一轮的基础上增加的,所以不会出现都能达到而方案不同的漏洞#include&lt;iostream&gt; #include&lt;cstdio&gt; #include...

大乐的博客 394

hdu 5512 Pagodas 思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 一开始的a和b确定了等差的一个数列,差值d为gcd(a,b),所以判断能选数字的奇偶性即可 #include&lt;bits/stdc++.h&gt; using namespace std; int main() { int t; int cas=1; sca...

大乐的博客 375

codeforces 1023D Array Restoration 线段树

题目链接:http://codeforces.com/problemset/problem/1023/D 之前想的时候忘了如果序列中没有q,也没有0时应该输出no 先特判,若果没有q并且有0,则先任意将一个0置为q,然后将所有的0置为他们相邻的值。这样不会影响序列的合法性,并且序列中没有了0,只需判断是否合法即可 用线段树查询一个数字出现的两个端点之间是否有比它小的数,如果有输出no,如果每...

大乐的博客 367
上一篇: hdu 6444 Neko's loop 单调队列+暴力处理循环节
下一篇: codeforces 1025D Recovering BST 区间DP
Dale_zero
博客等级 码龄9年 10粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值