0
点赞
收藏
分享

微信扫一扫

【Python训练营】Python每日一练----第26天:后缀表达式

在这里插入图片描述

Python每日一练:

题目描述

题目描述
给定 N 个加号、M 个减号以及 N + M + 1个整数 ,小明想知道在所有由这 N 个加号、MM 个减号以及 N + M +1个整数凑出的合法的 后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用 1 2 3 + -,则 “2 3 + 1 -” 这个后缀表达式结果是 4,是最大的。

输入描述
第一行包含两个整数 N , M

第二行包含 N + M + 1个整数 A 。

输出描述
输出一个整,代表答案。

输入输出样例
示例
输入
1 1
1 2 3
输出
4

运行限制
最大运行时间:1s
最大运行内存: 256M

解题思路

刚做这道题目时,我们也是一头雾水,到底该怎么去讨论±括号的问题,换了好几遍的例子一直想不出来,直到发现了Alex_996巨佬的思路我才恍然大悟,这里参考学习了大佬的经验做法:2019年第十届蓝桥杯 - 省赛 - C/C++大学B组 - I. 后缀表达式

  • 这道问题首先要明确一点,输入的数据中可以有负数,这就要求我们 +或者-的时候要考虑括号的问题,怎样才能使我们要求的数据之和最大呢。
  • 首先就是没有-号的时候,直接将输入的数据求和就可以啦;
  • 有-号出现的时候,我们举例进行观察:a1 < a2 < a3 < a4 < a5 < a6。
  • 一个"-“号:(a1 + a2 + a3) - (a4 + a5 + a6)
    两个”-“号:(a1 + a2 + a3) - (a4 + a5) - a6
    三个”-“号:(a1 + a2 + a3) - a4 - a5 - a6
    四个”-“号:(a1 + a2) - (a4 - a3) - a5 - a6
    五个”-"号:a1 - (a5 - a2) - (a4 - a3) - a6
    我们可以发现一件神奇的事情,上面几个5个式子全部都是相等的,都等价于a1 + a2 + a3 - a4 - a5 - a6。那么简言之,就是我们只需要讨论一个减号的时候就可以解决所有减号的问题啦!
  • 1.如果所有的数都是正数:那么 (a2 + a3 + a4 + a5 + a6) - (a1) 既是最大的结果
    2.如果所有的数都是负数:那么 (a6) - (a1 + a2 + a3 + a4 + a5) 既是最大的结果,等价于 (abs(a1) + abs(a2) + abs(a3) + abs(a4) + abs(a5)) - abs(a6),跟第1种有点类似。
    3.如果有正有负,那么 (a1 + a2 + a3) - (a4 + a5 + a6),其中a1、a2、a3是正数,a4、a5、a6是负数,既是最大的结果,等价于 (a1 + a2 + a3) + abs(a4) + abs(a5) + abs(a6)
  • 所以说我们进行总结: 1.如果所有的数都是正数:最后的 a6 - a1 等价于 abs(a1 - a6) 2.如果所有的数都是负数,也是 abs(a1) - abs(a6),等价于 abs(a1 - a6) 3.如果有正有负:是 a1 + abs(a6),等价于 a1 - a6,肯定是正数,所以也可以加上绝对值号:abs(a1 - a6)

源码分享

# Time    : 2022/2/21 14:41
# File    : 后缀表达式.py
# Author  : 是Dream呀!
# VX      : Xu18300396393
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
N,M = map(int,input().split())
list1 = list(map(int,input().split()))
if M == 0:
    print(sum(list1))
else:
    sum = 0
    list1.sort()
    for i in range(1,N+M):
        sum += abs(list1[i])
    sum += abs(list1[-1]-list1[0])
    print(sum)

学习总结

  • 单行对多个多个变量进行赋值:N,M = map(int,input().split())
  • 总结规律会使一道很复杂的题目变得很简单!

🏆往期文章----好文推荐🏆

🥇 [Python公开课]零基础玩转Python基础篇----第一节:Python的自我介绍

🥈 [Python公开课]零基础玩转Python进阶篇----第一节:Python中的文件操作

🥉 快来一场一场刷题狂欢的party吧!----【Python训练营】
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论