题解 | 最大连续子序列
最大连续子序列
https://www.nowcoder.com/practice/afe7c043f0644f60af98a0fba61af8e7
def find_max_subseq(nums, n): """查找最大连续子序列""" # dp[i]表示以i结尾的最大子序列和 dp = nums.copy() # 记录每个位置的起始索引 start_idx = [i for i in range(n)] max_sum = dp[0] end = 0 start = 0 # 动态规划 for i in range(1, n): if dp[i-1] + nums[i] > nums[i]: dp[i] = dp[i-1] + nums[i] start_idx[i] = start_idx[i-1] else: dp[i] = nums[i] start_idx[i] = i # 更新全局最大值 if dp[i] > max_sum or (dp[i] == max_sum and start_idx[i] < start): max_sum = dp[i] end = i start = start_idx[i] return max_sum, nums[start], nums[end] def main(): while True: try: n = int(input()) if n == 0: break nums = list(map(int, input().split())) # 处理全负数情况 if all(x < 0 for x in nums): print(0, nums[0], nums[-1]) continue max_sum, first, last = find_max_subseq(nums, n) print(max_sum, first, last) except EOFError: break if __name__ == "__main__": main()