1 solutions

  • 0
    @ 2024-12-11 0:49:29

    C :

    #include<stdio.h>
    
    const int N=100;
    
    int maxsum(int m,int n,int mat[][N])
    {
    	int matsum[N][N+1],ret,sum,i,j,k;
    	for(i=0;i<m;i++)
    		for(matsum[i][j=0]=0;j<n;j++)
    			matsum[i][j+1]=matsum[i][j]+mat[i][j];
    	for(ret=mat[0][j=0];j<n;j++)
    		for(k=j;k<n;k++)
    			for(sum=0,i=0;i<m;i++)
    			{
    				sum=(sum>0?sum:0)+matsum[i][k+1]-matsum[i][j];
    				ret=(sum>ret?sum:ret);
    			}
    	return ret;
    }
    
    int main()
    {
    	int n,i,j,g[N][N];
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(i=0;i<n;i++)
    			for(j=0;j<n;j++)
    				scanf("%d",&g[i][j]);
    		printf("%d\n",maxsum(n,n,g));
    	}
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    
    const int N=100;
    
    int maxsum(int m,int n,int mat[][N])
    {
    	int matsum[N][N+1],ret,sum,i,j,k;
    	for(i=0;i<m;i++)
    		for(matsum[i][j=0]=0;j<n;j++)
    			matsum[i][j+1]=matsum[i][j]+mat[i][j];
    	for(ret=mat[0][j=0];j<n;j++)
    		for(k=j;k<n;k++)
    			for(sum=0,i=0;i<m;i++)
    			{
    				sum=(sum>0?sum:0)+matsum[i][k+1]-matsum[i][j];
    				ret=(sum>ret?sum:ret);
    			}
    	return ret;
    }
    
    int main()
    {
    	int n,i,j,g[N][N];
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(i=0;i<n;i++)
    			for(j=0;j<n;j++)
    				scanf("%d",&g[i][j]);
    		printf("%d\n",maxsum(n,n,g));
    	}
    	return 0;
    }
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		for (; sc.hasNext();) {
    			int n = sc.nextInt();
    			int[][] array = new int[n][n];
    			for (int i = 0; i < n; i++) {
    				for (int j = 0; j < n; j++) {
    					array[i][j] = sc.nextInt();
    				}
    			}
    			System.out.println(maxSubMatrixSum(array));
    		}
    		sc.close();
    	}
    
    	private static int maxSubMatrixSum(int[][] mat) {
    		int ret, sum, i, k;
    		int j = 0;
    		int[][] matsum = new int[mat.length][mat.length + 1];
    		
    		for (i = 0; i < mat.length; i++)
    			for (j = 0,matsum[i][j] = 0; j < mat.length; j++){
    				matsum[i][j + 1] = matsum[i][j] + mat[i][j];
    			}
    		
    		for (j = 0,ret = mat[0][0]; j < mat.length; j++)
    			for (k = j; k < mat.length; k++)
    				for (sum = 0, i = 0; i < mat.length; i++) {
    					sum = (sum > 0 ? sum : 0) + matsum[i][k + 1] - matsum[i][j];
    					ret = (sum > ret ? sum : ret);
    				}
    		return ret;
    	}
    
    }
    
    
    • 1

    Information

    ID
    728
    Time
    1000ms
    Memory
    32MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By