DonoToT 2020-05-16 17:19 采纳率: 0%
浏览 406

PAT 1007 Maximum Subsequence Sum 测试点6"最大和前面有一段是0"错误

Given a sequence of K integers { N
​1​​ , N​2​​ , ..., N​K​​ }. A continuous subsequence is defined to be { N​i​​ , N​i+1​​ , ..., N​j​​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.


Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence



Input Specification:
Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (≤10000). The second line contains K numbers, separated by a space.


Output Specification:
For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.


Sample Input:

10
-10 1 2 3 4 -5 -23 3 7 -21

Sample Output:

10 1 4

#include<cstdio>
#include<iostream>
using namespace std;

int a[10010];
struct b{
    int num;
    int l;
    int r;
}sum, maxx;

int main(void)
{
    int k, waitr = 0;
    sum.num = 0, maxx.num = -1;

    cin >> k;
    for( int i=0; i<k; i++)
    {
        cin >> a[i];

        if( sum.num == 0)
        {
            if( a[i-1] == 0 && a[i] > 0 && i)   sum.l = 0;          
            else                                sum.l = a[i];
        }
        sum.num += a[i];
        sum.r = a[i];

        if( sum.num > maxx.num)
        {
            maxx.num = sum.num;
            maxx.l = sum.l;
            maxx.r = sum.r;
        }

        if( sum.num < 0)
        {
            sum.num = 0;
        }
    }

    if( maxx.num == -1)     
        cout << "0 " << a[0] << " " << a[k-1];
    else    
        cout << maxx.num << " " << maxx.l << " " << maxx.r;
    return 0;

}

图片说明

只有测试点6怎么改都不对, 求大佬帮忙看看问题错在哪

  • 写回答

2条回答 默认 最新

  • zqbnqsdsmd 2020-09-23 13:44
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化