当前位置: 代码迷 >> 综合 >> 吃烧饼
  详细解决方案

吃烧饼

热度:93   发布时间:2024-02-04 11:25:34.0

阿里校招笔试题

题目描述:现在有N个盘子,第 i 个盘子放了 si 个烧饼,小明可以任意选一个数字 x,x介于 1 和 N 之间,他可以从 1 到 x之间的盘子都吃一个烧饼。如果 1 到 x 个盘子中有一个盘子没有烧饼,那么他不能选择这个 x。 假设小明胃口无限大,求小明能吃的最多的烧饼数量。

input:
3
2 1 3output:
4

样例解释:其实很容易想到要从最后一个盘子开始做选择,先选了3号盘子的话,每个盘子吃掉一个烧饼一共吃掉三个,这个时候每个盘子烧饼数目变成1,0,2,下一步在做选择的时候就只能选择1号盘子吃掉一个烧饼了,所以一共吃掉四个烧饼。

按照这样从后先前模拟确实也可以,但是不够优化,其实可以发现选择每个盘子可以吃掉的烧饼数目取决于当前盘子的烧饼和前面所有盘子烧饼数目的最小值,这样求出每个盘子可以吃的烧饼数目在累加起来就好了,也可以做到从前往后推更加简洁,

很多时候虽然从后向前推思路可能会更加直接,这个时候不妨想想怎么从前往后推,或者会使得整个思路更加简洁。

n = input()
s = input().split()
nums = [int(i) for i in s]min_num, res = nums[0], 0
for i in range(len(nums)):min_num = min(min_num, nums[i])res += min_num
print(res)

 

  相关解决方案