后缀表达式

一、题目描述

P8683 [蓝桥杯 2019 省 B] 后缀表达式

二、算法简析

显然,这道题要用贪心思想。想当然的,我们会先进行降序排序,将大的相加,在减去小的。然而,这种想法是错误的。因为这道题要求的是后缀表达式的最大值,为了便于理解,我们转换为中缀表达式的最大值,这里就有了一个隐含条件——中缀表达式可以加括号。
有了括号的加入,情况就变得复杂了。但并不总是如此。

  • 1、当 M = = 0 M==0 M==0 时,即没有减号。
    这时,无论我们怎样加括号,都是加法运算,也就是所有元素相加。
  • 2、当 M > 0 M > 0 M>0 时,即存在减号,至少有一个减号。
    首先,我们知道数有 N + M + 1 N + M + 1 N+M+1 个、符号有 N + M N + M N+M 个,所以两个数之间一定有一个符号。假设组合形式为 符号 + ,显然有 N + M N+M N+M 对,有一个数没有符号(相当于加号)。谁来当这个没有符号的数呢?从贪心的角度,应该选最大的数(毕竟相当于前面为加号),记为 max
    由于减号的存在,必然有一个数要被减去。我们当然希望这个数要小,所以选最小的数,记为 min
    我们将式子写成如下形式:max _{} _{} … - (min _{} _{} …)
    _即符号,{}为数。我们发现:对于一个数 a a a,如果我们想上它,可以与 + 组合放在括号外,也可以与 - 组合放在括号内(括号前为 -,负负得正);如果想去它,可以与 + 组合放在括号内,也可以与 - 组合放在括号外。
    这有什么用呢?先考虑符号无限多的情况,为了得到最大值,我们肯定加正数减负数,相当于加一个数的绝对值。利用上面的发现,在 +- 的数量有限时,无论一个数与哪个符号组合,只要调整这个组合的位置,就可以达到我们想要的加减状态——加上剩余数的绝对值。
    注意,只要有一个减号,我们就能达到上述目的。

总结
1、当 M = = 0 M==0 M==0 时,所有元素相加。
2、当 M > 0 M > 0 M>0 时, max min,再加上剩余数的绝对值。


三、本题代码

#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;int N, M;
vector<int> A;int quickin(void)
{int ret = 0;bool flag = false;char ch = getchar();while (ch < '0' || ch > '9'){if (ch == '-')    flag = true;ch = getchar();}while (ch >= '0' && ch <= '9' && ch != EOF){ret = ret * 10 + ch - '0';ch = getchar();}if (flag)    ret = -ret;return ret;
}int main()
{#ifdef LOCALfreopen("test.in", "r", stdin);#endifN = quickin(), M = quickin();for (int i = 0; i < N + M + 1; i++){int a = quickin();A.push_back(a);}sort(A.begin(), A.end());ull ans = 0;if (M > 0){ans += A[A.size() - 1];ans -= A[0];for (int i = 1; i < A.size() - 1; i++)ans += abs(A[i]);}elsefor (int i = 0; i < A.size(); i++)ans += A[i];cout << ans << endl;return 0;	
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PYTHON 120道题目详解(94-96)

94.Python中的递归函数是什么&#xff1f;请给出一个例子。 递归函数是一种特殊的函数&#xff0c;它在其定义中会调用自身。这种调用通常是在函数的某个条件语句中&#xff0c;当满足某个条件时&#xff0c;函数会调用自身来处理更小或更简单的子问题。递归函数通常用于解决可…

docker 安装gitlab

Docker方式安装参考&#xff1a; https://docs.gitlab.com/ee/install/docker.html https://docs.gitlab.cn/jh/install/docker.html 1.确保docker与docker-compose安装运行正常 # docker version # docker-compose version 2.关闭防火墙 # sudo systemctl stop firewalld …

分布式任务调度的几种实现(Redis实现分布式锁 MySQL实现任务调度 负载均衡)

需求背景 现在有一个计算搜索词热榜的任务&#xff0c;该服务部署在了多个节上&#xff0c;希望只有一个节点在执行这个任务。 常见方案 使用Redis实现分布式锁方案 使用一个分布式锁&#xff0c;确保整个分布式环境下&#xff0c;只有一个节点能够拿到锁。节点先抢占分布式…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-27-处理单选和多选按钮-番外篇

1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo&#xff0c;然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何使用playwright来处理单选按钮和多选按钮进行自动化测试&#xff0c;想必大家都已经掌握的八九不离十了吧。这一篇其实也很简单&#xff1a…

结构体(一)

结构体的声明&#xff1a; 结构体由一系列成员组成&#xff0c;每个成员的类型可以是基本数据类型&#xff08;int&#xff0c;char&#xff0c;double…&#xff09;或复合数据类型&#xff08;结构体&#xff0c;枚举&#xff0c;数组…&#xff09;。比如如下例子&#xf…

numpy快速使用

numpy是一个开源的Python科学计算库&#xff0c;它提供了高效的多维数组对象&#xff0c;以及计算、操作数组数据的工具。以下是一些numpy的常见用法示例&#xff1a; 导入numpy库&#xff1a; import numpy as np创建数组&#xff1a; arr np.array([1, 2, 3, 4, 5]) # 一…

浅谈 TCP 三次握手

文章目录 三次握手 三次握手 首先我们需要明确&#xff0c;三次握手的目的是什么&#xff1f; 是为了通信双方之间建立连接&#xff0c;然后传输数据。 那么建立连接的条件是什么呢&#xff1f; 需要确保通信的双方都确认彼此的接收和发送能力正常&#xff0c;满足这个条件&a…

今天面了个字节拿 38K 出来的测试,让我见识到了基础的天花板

最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金九银十的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉在一个舒适圈待久了&#xff0c;人过得太过安逸&#xff0c;晋升涨…

【物联网应用案例】牧场牛棚环境管理项目

众所周知&#xff0c;奶牛的健康和牛奶的产量在很大程度上取决于其所在的环境。对于牧场而言&#xff0c;牛棚内的环境更是至关重要。一个适宜的环境不仅能保证奶牛的舒适度&#xff0c;还能提高其产奶量&#xff0c;从而为牧场带来更多的经济效益。 为了更好地理解牛棚环境对…

Jeecg项目部署

说明&#xff1a;Jeecg是一款低代码开发平台&#xff0c;简单说是一款现成的项目&#xff0c;该项目集成了许多功能&#xff0c;我们可以在这个项目之上开发自己的业务代码。 本文介绍Jeecg项目的部署&#xff0c;包括后端jeecg-boot项目、前端vue3项目。前端项目在本地Window…

Java的编程之旅19——使用idea对面相对象编程项目的创建

在介绍面向对象编程之前先说一下我们在idea中如何创建项目文件 使用快捷键CtrlshiftaltS新建一个模块&#xff0c;点击“”&#xff0c;再点New Module 点击Next 我这里给Module起名叫OOP,就是面向对象编程的英文缩写&#xff0c;再点击下面的Finish 点Apply或OK均可 右键src…

MyBatis二级缓存

session.commit()会清除缓存 session.close() 1、在sqlMapConfig.xml中配置开始全局二级缓存 <settings> <setting name"cacheEnable" value"true"/> </settings> 2、去各自的sql映射文件里&#xff0c;单独开启二级缓存 <cache…

Self-attention与multi-head self-attention

自注意力&#xff08;self-attention&#xff09;允许模型在处理序列数据时&#xff0c;根据输入中的其他位置来加权考虑每个位置的信息。这对于处理长文本或序列中的依赖关系非常有用。 多头自注意力&#xff08;multi-head self-attention&#xff09;建立在自注意力机制之上…

2024Python自动化测试面试必备知识点!

在准备 Python 自动化测试面试时&#xff0c;以下是一些必备的知识点&#xff0c;可以帮助您在面试中展现实力&#xff1a; 软件测试基础&#xff1a; 熟悉软件测试的基本概念&#xff0c;包括测试类型&#xff08;功能测试、性能测试、安全测试等&#xff09;、测试方法&#…

数据安全治理实践路线(中)

数据安全建设阶段主要对数据安全规划进行落地实施&#xff0c;建成与组织相适应的数据安全治理能力&#xff0c;包括组织架构的建设、制度体系的完善、技术工具的建立和人员能力的培养等。通过数据安全规划&#xff0c;组织对如何从零开始建设数据安全治理体系有了一定认知&…

微服务篇之任务调度

一、xxl-job的作用 1. 解决集群任务的重复执行问题。 2. cron表达式定义灵活。 3. 定时任务失败了&#xff0c;重试和统计。 4. 任务量大&#xff0c;分片执行。 二、xxl-job路由策略 1. FIRST&#xff08;第一个&#xff09;&#xff1a;固定选择第一个机器。 2. LAST&#x…

西门子S7-1500作为智能设备共享功能

本章节介绍了共享设备的功能&#xff0c;优势&#xff0c;使用要求&#xff0c;使用规则&#xff0c;如何将智能设备作为共享设备&#xff0c;实现一个智能设备同时与2个IO控制器进行通信的示例&#xff0c;以及常见问题。 一、共享设备功能概述 信号模块可以被不同的IO控制器…

【MIT-PHP-推荐】imi-ai 是一个 ChatGPT 开源项目

mi-ai 是一个 ChatGPT 开源项目&#xff0c;支持聊天、问答、写代码、写文章、做作业等功能。 项目架构合理&#xff0c;代码编写优雅&#xff0c;简单快速部署。前后端代码完全开源&#xff0c;不管是学习自用还是商用二开都很适合。 本项目现已支持 ChatGPT 聊天 AI 和 Emb…

蓝桥杯:递增三元组

题目 递增三元组&#xff08;2018年蓝桥杯真题&#xff09; 题目描述&#xff1a; 给定三个整数数组 A [A1, A2, … AN], B [B1, B2, … BN], C [C1, C2, … CN]&#xff0c; 请你统计有多少个三元组(i, j, k) 满足&#xff1a; 1 < i, j, k < N Ai < Bj &…

都说了别用BeanUtils.copyProperties,这不翻车了吧

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 故事 新年新气象&#xff0c;小猫也是踏上了新年新征程&#xff0c;自从小猫按照老猫给的建议【系统梳理大法】完完整整地梳理完毕系统之后&#xff0c;小猫对整个系统的把控可谓又是上到可一个新的高度。…