0

我关于 MSS 问题的代码是在数组大小大于整数的最大值时给出运行时错误(非零退出代码) ,尽管我已经使用 2D 数组解决了数组大小 bu 的问题,但仍然出现错误。代码在我的系统上运行良好。我无法弄清楚问题所在。你能?

import java.io.*;
import java.util.*;
import java.lang.*;
 class A{
 public static long max_sum_subarray_neg(long[] A,int n) //when all -ve elements
 {                                                           
     long ans=Long.MIN_VALUE;
     for(int i=0;i<n;i++)
     {
         if(A[i]>ans)
             ans=A[i];
     }
     return(ans);
 }  

public static long max_sum_subarray(long[][] A,int n,int k)  // for atleast one +ve element
{                                                      
    long sum=0,ans=0;
    for(int i=0;i<k;i++)
        for(int j=0;j<n;j++)
        {
        if(sum + A[i][j]>0)
            sum+=A[i][j];
        else sum=0;
        ans= Math.max(ans,sum);
        }
    return ans;
}

public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    int t=Integer.parseInt(br.readLine());
    while(t-->0)
    {
        StringTokenizer s=new StringTokenizer(br.readLine());
        int n= Integer.parseInt(s.nextToken());
        int k= Integer.parseInt(s.nextToken());
        s=new StringTokenizer(br.readLine());
        int i,j,neg=0;
        long B[]=new long[n];                 //given array
        long A[][]=new long[k][n];            //array on which MSS has to be done after cpying value from given array k times
        for(i=0;i<n;i++)                    
        {
            B[i]=Long.parseLong(s.nextToken());
            if(B[i]<0)
                neg++;
        }
        long ans;
        if(neg==n)
            ans=max_sum_subarray_neg(B,n);
        else
        {
            for(i=0;i<k;i++)              //copying given array elements k times 
                for(j=0;j<n;j++)     
                    A[i][j]=B[j];    

            ans=max_sum_subarray(A,n,k);
        }
        System.out.println(ans);
    }
}
}
4

0 回答 0