二位数组环状最大子矩阵

由于上次二位数组,使用了函数,所以这次只要修改函数就可以了。

//Powered by lzr!
#include<iostream>
using namespace std;

int yiwei_max(int n,int a[])
{
     int temp=0,sum=-999999999;
     int j=0,k=0,i;

     for(i=0;i<n;i++)
    {
        if(temp>0)
        {
            temp+=a[i];
        }
        else
        {
            temp=a[i];
            if(a[i]>0 && k==0) k=i;
        }
        if(temp>sum)
        {
            sum=temp;
        }
        if(i==n-1 && j==0)
        {
            i=-1;
            j=1;
            n=k;
        }
    }
     return sum;
}

void main()
{
    int i,j,k,m,n;
    int a[100][100];
    int b[100];
    int temp=0,sum=-99999999;

    cout<<"几行几列?"<<endl;
    cin>>m>>n;
    for(int i=0;i<m;i++)
    {
         for(int j=0;j<n;j++)
         {
              cin>>a[i][j];
         }
    }

    for(i=0;i<m;i++)
    {
        for(k=0;k<n;k++)
        {
            b[k]=0;
        }
        for(j=i;j<m;j++)
        {
            for(k=0;k<n;k++)
            {
                b[k]+=a[j][k];
            }
            temp=yiwei_max(k,b);
            if(temp>sum)
            {
                sum=temp;
            }
         }
    }
    cout<<sum<<endl;
}

时间: 2024-07-30 13:34:06

二位数组环状最大子矩阵的相关文章

C++ 出现bug :二位数组的操作运算,求非对角线的元素的和

编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; class MATRIX { public: void mATRIX(); void MATRIX_sum(); void MATRIX_display(); static int fact_len;//定义静态变量 private: int sum; int a[40][40]; }; int MATRIX

在控制台输入字母然后在控制台打印相应的二位数组字母,要求一行打印

1 package MyHomeWork; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Scanner; 6 7 /** 8 * Created by zhouyubin on 7/11/14. 9 */ 10 public class Test2 { 11 private static final char[][] print_a={{' ',' ',' ','A',' ',' ',' ','

二位数组中的查找——杨氏矩阵

------------------------------------------------------------------------------------------------- "杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增.要想在该数组中查找数,首 先该数组得满足"杨氏矩阵"的特点.为了方便理解我们可以将一个二位数组看作是一个矩阵,假设i 为行,j为列,数组为str,那么只要满足(str[i][j]<str[i][j+1] &a

二位数组传参及二位数组动态分配问题

//二位数组参数传递 //1. void display1(int arr[][4], const int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 4; j++) { cout << arr[i][j] << ' '; } cout << endl; } cout << endl; } //2. void display2(int(*parr)[4], const

二维数组返回最大子矩阵之和

设计思路 将二维数组转化为一位数组(并非形式上的转化而是将连续的行合并然后当做上次编写的一维数组求最大子数组和)来计算.时间复杂度没有达到要求的O(n),也是通过遍历的方式将一个子矩阵与上几个子矩阵相加如果小于0则舍去这个子矩阵,按此方法计算从这个子矩阵以后的矩阵,知道遍历完取最大值. 代码: package soft_third_test; public class test { static int maxSum(int p[][],int startLine,int endLine,int

环形二维数组求最大子矩阵

1.设计思路 结合环一位数组的开发经验,拓展到二维.与前者主要是时间复杂度没有做处理. 2.源代码 1 //作者:王炳午.董龙洋.日期:2015.3.24. 2 #include <iostream> 3 #include<stdlib.h> 4 #include<time.h> 5 using namespace std; 6 int maxMax(int amax[]) //求最大 7 { 8 int i; 9 int sum = 0; 10 int max; 11

求一个二维数组的最大子矩阵的和

要求: • 输入一个二维整形数组,数组里有正数也有负数. • 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. • 求所有子数组的和的最大值. 设计思路: 使用“最笨方法”,考虑以每个数据开始的每个子矩阵.思路简单,效率极低. 实现语言:Java 源代码如下: /* * row,col分别为数组行数和列数 * source_row,source_col为子矩阵的起始位置 * edge_row,edge_col分别为行列边界 * */ public static int row =

二位数组

一.题目及要求: 返回一个整数数组中最大子数组的和 输入一个二维整形数组,数组里有正数也有负数:二维数组首尾相接,像一条首尾相接的带子一样. 二.设计思路: 调用循环一维数组求最大子数组的函数,将二维数组列的情况全部列出,即转化为一维数组. 三.源代码 #include<iostream.h> int max2(int arry[],int length) //跨越arry[n-1].arry[0]的最大和 { int total=0; int sum=arry[0]; int minsum=

二位数组升级版

一.题目及要求: 返回一个整数数组中最大子数组的和 输入一个二维整形数组,数组里有正数也有负数:二维数组首尾相接,像一条首尾相接的带子一样. 二.设计思路: 这个题目其实与上次毫无区别,仍然调用循环一维数组求最大子数组的函数,将二维数组列的情况全 部列出,即转化为一维数组.a[0][0],a[0][0]a[0][1].........在调用函数即可. 三.源代码 #include<iostream.h> int max2(int arry[],int length) //跨越arry[n-1]