小明是一个有强迫症的盗贼,他盗技精湛屡屡得手。小明害怕自己的后半生在监狱中度过,他打算干完这一票就收手。
在街上现有n座房屋,每个房屋的财富价值为a[i],小明希望在这n个房屋中盗取尽可能多的价值。由于有的房屋存在年久失修等问题小明进入房屋时存在受伤风险,所以财富价值可能为负。由于小明具有强迫症,他每次出手仅会盗取连续的任意房屋,小明至少选取一个房屋进行偷盗。
输入格式:
第一行一个整数n(1≤n≤1000000);
第二行n个整数表示每个房屋的财富价值ai。
输出格式:
一行一个整数表示小明能盗取的最大价值。
输入样例:
在这里给出一组输入。例如:
5
3 4 -1 4 -10
输出样例:
在这里给出相应的输出。例如:
10
样例解释
小明盗取1-4号房屋,价值为3+4+(-1)+4=10
最笨也是最简单的办法,把所有连续的价值之和计算出来放到一个数组中,取最大值就行了
n = int(input('房屋数量:'))
n_list = list(map(int, input('房屋价值:').split()))
v_list = []
for i in range(n):
for j in range(i+1,n+1):
v_list.append(sum(n_list[i:j]))
print(max(v_list))
你题目的解答代码如下:
n = int(input())
li = list(map(int, input().split()))
maxv = li[0]
for i in range(n):
sumv = 0
for j in range(i,n):
sumv += li[j]
if maxv < sumv:
maxv = sumv
print(maxv)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
这个题最高效的应该是动态规划,参考:https://blog.csdn.net/plm199513100/article/details/106716726,不过需要改进其中全是负数的情况
def MaxSum(ListA,n):
allMax = max(ListA)
seqSum = 0
for i in range(n):
if ListA[i] + seqSum<0:
seqSum=0
else:
seqSum+=ListA[i]
if seqSum>allMax :
allMax=seqSum
return allMax
n = int(input('房屋数量:'))
n_list = list(map(int, input('房屋价值:').split()))
print(MaxSum(n_list,n))
怎么还有负数?小偷看到穷人家还要自己补贴吗/滑稽
n = int(input('有几座房屋'))
n_list = list(map(int, input('房屋价值').split()))
answer_list = []
asn = []
for i in range(n):
answer_list.append([int(n_list[i])])
for z in range(n+1):
answer_list.append(n_list[i:z])
for answer in answer_list:
asn.append(sum(answer))
print(max(asn))