您的位置:首页 > 其它

nyoj104 最大和

2015-11-03 21:33 429 查看

最大和

时间限制:1000 ms | 内存限制:65535 KB难度:5描述给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。例子:0 -2 -7 092 -6 2-41 -4 1-1 8 0 -2其最大子矩阵为:92-41-18其元素总和为15。输入第一行输入一个整数n(0<n<=100),表示有n组测试数据;每组测试数据:第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;随后有r行,每行有c个整数;输出输出矩阵的最大子矩阵的元素之和。样例输入
1
4 4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
样例输出
15
package nyoj104;import java.util.Scanner;public class Main {public static int maxsum(int n, int[] a) {int[] dp = new int;dp[0] = a[0];int max = dp[0];for (int i = 1; i < n; i++) {if (dp[i - 1] > 0)dp[i] = dp[i - 1] + a[i];elsedp[i] = a[i];if (max < dp[i])max = dp[i];}return max;}/*public static int maxsum(int n, int[] a){int i;int sum = 0, b = 0;for(i = 0; i < n; i++){if(b > 0)b += a[i];else b = a[i];if(b > sum)sum = b;}return sum;}*/public static void main(String[] args) {Scanner reader = new Scanner(System.in);int N = reader.nextInt();int i, j, k;while (N-- > 0) {int row = reader.nextInt();int col = reader.nextInt();int[][] ma = new int[row][col];for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {ma[i][j] = reader.nextInt();}}int max ;int sum = Integer.MIN_VALUE;int[] b = new int[col];for (i = 0; i < row; i++) {for (j = 0; j < col; j++)b[j] = 0;for (j = i; j < row; j++) {for (k = 0; k < col; k++)b[k] += ma[j][k];max = maxsum(col, b);//System.out.println(max);if (sum < max)sum = max;}}System.out.println(sum);}reader.close();}}
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: