文章

20

粉丝

146

获赞

10

访问

41.8k

头像
最大子串和 题解:
P1703 厦门大学复试机试题
发布于2023年10月31日 08:37
阅读数 833

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

const int maxn=110;
int a[maxn];
int dp[maxn],ansp,ansq,ans;
void DP(int n)
{
    int p=0,q=0;
    dp[0]=a[0];
    ans=dp[0];
    for(int i=1; i<n; i++)
    {
        if(a[i]>a[i]+dp[i-1]) //遇到一个数他可以覆盖前面数的和
        {
            dp[i]=a[i];
            p=i;//更新起点
            q=i;//更新终点
        }
        else
        {
            dp[i]=a[i]+dp[i-1];
            q=i;//只需要更新右边界
        }
        if(ans<dp[i])
        {
            ans=dp[i];//每次都更新最大值;
            ansp=p;
            ansq=q;
        }

    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0; i<n; i++)
        {
            cin>>a[i];
        }
        DP(n);
        for(int i=ansp; i<=ansq; i++)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
        cout<<ans<<endl;
    }
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发