文章

74

粉丝

0

获赞

94

访问

8.2k

头像
最大子串和 (dp解法)题解:
P1703 厦门大学复试机试题
发布于2025年8月18日 17:42
阅读数 88

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

int dp[100 + 5]; // 以a[i]结尾的最大连续子串值,必须包括a[i]
int a[100 + 5];
long long maxx;

int main(){

	int n;
	while(cin >> n){

        for(int i = 0; i < n; i ++) cin >> a[i];

        dp[0] = a[0];
        maxx = dp[0];

        int st = 0, en = 0, flag = 0; // st为最大连续子串的开始下标,en为结束下标,flag为dp[i]的st
        for(int i = 1; i < n; i ++){
            
            // dp部分
            if(dp[i - 1] < 0) {
                flag = i;
                dp[i] = a[i];
            } else dp[i] = a[i] + dp[i - 1];

            if(maxx < dp[i]){
                maxx = dp[i];
                st = flag;
                en = i;
            }
        }

        if(maxx >= 0) {
            for(int i = st; i <= en; i ++) cout << a[i] << ' ';
        } else {
            maxx == 0;
        }

        cout << '\n' << maxx << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发