哈夫曼树_ 2023-03-19 00:07 采纳率: 57.7%
浏览 25
已结题

C++ PAT甲级 最大连续子序列和

原题链接https://pintia.cn/problem-sets/994805342720868352/exam/problems/994805514284679168
题目大意: 有一个数字序列 a1,..., an, 求i, j (1 <= i <= j <= n), 使得ai + ... + aj最大,输出最大和和ai, aj。 若所有的数均小于0, 则认为最大和为0,输出首尾元素。若有多种方案,输出i, j最小的一组。

问题

    if (flag == false) 
    {
        printf("0 %lld %lld\n",arr[0],arr[k - 1]);
        return 0;
    }

为什么删去其中的return 0; 有的用例就不能通过呢?

以下是完整代码:

#include<cstdio>
const int MAX = 10001;
typedef long long LL;
LL arr[MAX], dp[MAX], indexArr[MAX] = {0};

int main()
{
    LL k;
    bool flag = false;
    scanf("%lld", &k);
    for (int i = 0; i < k; i++)
    {
        scanf("%lld", &arr[i]);
        if (arr[i] >= 0) flag = true;
    }
    
    if (flag == false) 
    {
        printf("0 %lld %lld\n",arr[0],arr[k - 1]);
        return 0;
    }
    
    dp[0] = arr[0];
    for (LL i = 1; i < k; i++)
    {
        LL sum = dp[i - 1] + arr[i];
        if (sum > arr[i])
        {
            dp[i] = sum;
            indexArr[i] = indexArr[i - 1];
        }
        else
        {
            dp[i] = arr[i];
            indexArr[i] = i;
        }
    }
    
    LL indexNum = 0;
    for (LL i = 1; i < k; i++)
    {
        if (dp[i] > dp[indexNum])
        {
            indexNum = i;
        }
    }
    
    printf("%lld %lld %lld\n", dp[indexNum], arr[indexArr[indexNum]], arr[indexNum]);
    
    return 0;
}

img

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-03-19 01:32
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费