文章

3

粉丝

0

获赞

23

访问

696

头像
(和pdf一样的模板)最大连续子序列 题解:

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

int main(){
    // 定义dp数组:dp[i]表示以第i个元素结尾的最大连续子序列和
    int dp[10000];
    // 定义a数组:存储输入的k个整数序列
    int a[10000];
    // k:输入的序列长度
    int k;
    
    // 循环读取测试用例,直到输入k=0时结束
    while(cin>>k){
        // 输入k=0,终止循环(题目要求)
        if(k==0) break;
        
        // flag标记:判断序列中是否有非负数(0或正数),初始为0(无)
        int flag=0;
        // 读取k个整数到数组a中
        for(int i=0;i<k;i++){
            cin>>a[i];
            // 只要有一个元素>=0,就将flag置为1(表示不是全负数)
            if(a[i]>=0) flag=1;
        }
        
        // 处理全负数的情况(flag=0)
        if(flag == 0){
            // 按题目要求:最大和为0,输出整个序列的首尾元素,换行保证格式正确
            printf("0 %d %d\n",a[0],a[k-1]);
            // 跳过后续逻辑,直接处理下一个测试用例
            continue;
        }
        
        // 动态规划初始化:以第0个元素结尾的最大子序列和就是它本身
        dp[0]=a[0];
        // maxx:记录全局最大子序列和,初始化为第一个元素的dp值
        int maxx=dp[0];
        // start_num:最终输出的最大子序列的起始下标,初始化为0
        ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发