文章

11

粉丝

20

获赞

4

访问

8.6k

头像
最大连续子序列 题解:DP空间优化O(1)(内存140kb),这题限制有点多,注意判断
P1334 浙江大学/中国矿业大学机试题
发布于2023年8月5日 23:54
阅读数 806

#include<cstdio>
int main() {
	int a, dp, maxT, left, right, leftmp, n;
	while (scanf("%d", &n) != EOF) {
		maxT = dp = left = right = 0; //初始化很重要!!!
		bool flag = true; //标记是否全为负数
		if (n == 0) break;

		for (int i = 0; i < n; i++) {
			scanf("%d", &a);
			if (dp > 0) dp += a; //dp状态为正可以继续加
			else if (a > 0) {
				leftmp = a; dp = a; flag = false;
				//leftmp记录下当前正数,可能之后会作为起点
			}
			else if (i == 0) leftmp = a; //记录下第一个数(如果最终全为负数)
			if (a == 0) flag = false;
			if (dp > maxT) {
				maxT = dp; right = a; left = leftmp; //这里就体现了leftmp的作用
			}
			if (i == n-1 && maxT == 0 && flag) { right = a; left = leftmp; }
		}
		printf("%d %d %d\n", maxT, left, right);
	}
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发