static int ans=Integer.MIN_VALUE; public static void main(String[] args) { Scanner sc=new Scanner(System.in); //while(sc.hasNext()){ int n=sc.nextInt(); int m=sc.nextInt(); int[][] data=new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { data[i][j]=sc.nextInt(); } } int[] dp=new int[m+1]; //统计几行的 for (int h = 1; h <= n; h++) { //从哪一行开始算起 for (int i = 0; i < n; i++) { int[] arr=new int[m+1]; for (int j = i; j < i+h&&j<n; j++) { for (int p = 1; p < arr.length; p++) { arr[p]+=data[j][p-1]; } dp[1]=arr[1]; if(dp[1]>ans){ ans=dp[1]; } for (int w = 2; w < arr.length; w++) { if(dp[w-1]<0) dp[w]=arr[w]; else dp[w]=dp[w-1]+arr[w]; if(dp[w]>ans) ans=dp[w]; } } //getSum(arr); } } //} System.out.println(ans); sc.close(); }
private static void getSum(int[] arr) { int sum=0,max=Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { int num=arr[i]; if(sum>0) sum += num; else sum = num; if(sum>max) max = sum; } if(max>ans) ans=max; } }