文章

52

粉丝

68

获赞

22

访问

11.5k

头像
最大连续子序列 题解:深度分析dp数组的本质及扩展条件
P1334 浙江大学/中国矿业大学机试题
发布于2025年2月2日 15:36
阅读数 30

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

int main(){
    int n;
    while(cin>>n){
        if(n==0){break;}
        int a[n],b[n];
        for(int i=0;i<n;i++){
            cin>>a[i];
            b[i]=a[i];
        }
        for(int i=1;i<n;i++){
            if(a[i-1]>0)a[i]+=a[i-1];
        }
        int max=a[0],pos=0;
        for(int i=0;i<n;i++){
            if(a[i]>max){
                max=a[i];
                pos=i;
            }
        }
        
        int pos2=pos;
        for(;pos2>=0;pos2--){
            if(a[pos2]<0)break;
        }
        
        if(max<0)cout<<0<<' '<<b[0]<<' '<<b[n-1]<<endl;
        else cout<<max<<' '<<b[pos2+1]<<' '<<b[pos]<<endl;
        
    }
}

首先要解决最大值问题,最长连续子序列的结论是基于前面的结论增长出来的,因为要连续,所以只要不是负的,为了更有可能的最大值,对于当前的结论来说,都会接受该次增长,最后我们得到了到每个元素的最大位置的全部的最长连续子序列,然后,我们根据前面的分析,既然大于0的都会计入到连续的增长中,那么小于...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发