Maximum Subsequence Sum[PAT1007][PTA01-复杂度2]——动态规划

Maximum Subsequence Sum

Question

思路

数据结构视频里面简单的讲了一下动态规划的方法,但这个题还需要输出开始最后的序列数,测试点中包含了全是负数、0和负数、最大子序列中含有负数、有不止一个最大子序列、最大子序列开头是0、最大子序列末尾是0这些情况。一开始想针对每个测试点专门写条件判断输出,感觉这种思路不是很对,后来参考了一下网上的解答,关键是要设置一个临时的开头结尾,判断。

实现

注释掉的一部分是原来错误的方法

#include<iostream>
using namespace std;
int main(){
    int num;
    cin>>num;
    int a[num];
    for(int i=0;i<num;i++) cin>>a[i];
    int thissum=0,maxsum=0;
    int start=0,end=num-1;
    int temp_start=0,temp_end=0;
    //int fin=0,lan=0;
    //int length=0;
    for(int j=0;j<num;j++){
        if(thissum>=0){
            thissum+=a[j];
            temp_end=j; 
        }
        else{
            thissum=a[j];
            temp_start=j;
            temp_end=j;
        }
        if(thissum>maxsum||(thissum==0)&&(end==num-1)){
            //the latter condition only happens when 0 is the start and end is the inital state
            maxsum=thissum;
            start=temp_start;
            end=temp_end;
            //length++;
            //lan=j;
        }
        /*
        else if(thissum<0){
            thissum=0;
        }*/
    }
    //cout<<length;
    //fin=lan-length+1;
    /*
    int flag1=0;//negative?
    int flag2=0;//0?
    for(int k=0;k<num;k++){
        if(a[k]>0) flag1++;
        if(a[k]==0) flag2++;
    }
    if(flag1==0&&flag2==0){
        maxsum=0;
        fin=0;
        lan=num-1;
        cout<<maxsum<<' '<<a[fin]<<' '<<a[lan]<<endl;
    }
    else if(flag1==0&&flag2>0){
        maxsum=0;
        fin=0;
        lan=0;
        cout<<0<<' '<<0<<' '<<0<<endl;
    }
    else{
        cout<<maxsum<<' '<<a[fin]<<' '<<a[lan]<<endl;
    }*/ 
    cout<<maxsum<<' '<<a[start]<<' '<<a[end]<<endl;
    return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值