文章

211

粉丝

0

获赞

1101

访问

36.9k

头像
最大子串和 题解:
P1703 厦门大学复试机试题
发布于2026年2月11日 14:10
阅读数 176

#include <bits/stdc++.h>
using namespace std;

int main() {    
    int n;
    while (cin >> n && n != 0) {
        vector<long long> a(n);
        for (int i = 0; i < n; i++) 
			cin >> a[i];      
        // 记录以i结尾的最优解
        long long curSum = a[0];
        int curL = 0;        
        long long bestSum = a[0];
        int bestL = 0, bestR = 0;        
        for (int i = 1; i < n; i++) {
            // 关键:>= 保证相等时延续,使终点j更小
            if (curSum + a[i] >= a[i]) {
                curSum += a[i];
            } else {
                curSum = a[i] ;
                curL = i;
            }            
            // 更新全局最优
            if (curSum > bestSum) {
                bestSum = curSum;
                bestL = curL;
                bestR = i;
            } else if (curSum == bestSum) {
                // 和相等,比较起点i(curL vs bestL)
                if (curL < bestL || (curL == bestL && i <...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发