为了更好的阅读体检,可以查看我的算法学习网
第一题
输入描述
第一行给出
N
N
N, 表示冰块的数量。
第二行中,按顺序给出代表打破第i块冰块所需的力的
A
i
Aᵢ
Ai。
题目保证企鹅所在的地方用
−
1
-1
−1表示, 没有企鹅位于冰块
1
1
1或冰块
N
N
N的情况。
3
≤
N
≤
2
∗
1
0
5
,
1
≤
A
i
≤
1
0
9
3≤N≤2*10⁵,1≤Aᵢ≤10⁹
3≤N≤2∗105,1≤Ai≤109
输出描述
输出可以将企鹅击落到水中的最小力。
示例1
输入
5
7 -1 6 2 5
输出
9
说明
见题目举例
示例2
输入
10
49 46 -1 50 46 46 47 40 40 49
输出
86
说明
打破第2块冰和第9块冰, 最小力为46+40=86
思路: 贪心
由于企鹅不会在第一个位置和最后一个位置,所以只需要求企鹅的左边和右边的最小值即可。
因为将企鹅左边的任意一个冰块敲掉,那么企鹅所在的冰块就和左边河岸不相连了。
同样地,将企鹅右边的任意一个冰块敲掉,那么企鹅所在的冰块就和右边河岸不相连了。
所以这样就可以贪心地去取企鹅左边冰块和右边冰块的最小值,两者相加即需要的最小力。
代码
n = int(input())
a = list(map(int, input().split()))
lmin = 0
pos = 0
for i in range(n):
if a[i] == -1:
pos = i
break
print(min(a[:pos]) + min(a[pos+1:]))