二维子数组之和的最大值
来源:互联网 发布:手机淘宝分享在哪 编辑:程序博客网 时间:2024/06/04 18:49
#include<iostream>
#define N 2
#define M 3
using namespace std;
//方法一:时间复杂度为:N^2 * M^2 * Max_Matrix的时间复杂度 = N^3 * M^3
int A[N][M] ={{-1,2,-2},{1,2,1}};
int B[N+1][M+1] ={{0,0,0,0},{0,-1,2,-2},{0,1,2,1}};
int Max(int x,int y)
{
return x>y? x:y;
}
int Max_Matrix(int min_x,int max_x,int min_y,int max_y)
{
int sum=0;
for(int i=min_x;i<=max_x;i++)
for(int j=min_y;j<=max_y;j++)
sum += A[i][j];
return sum;
}
//方法二:用PS保存子矩阵的值,不过数组从(1,1)开始保存值
int main()
{
int max = A[0][0];
for(int min_x=0;min_x<N;min_x++)
for(int max_x=min_x;max_x<N;max_x++)
for(int min_y=0;min_y<M;min_y++)
for(int max_y=min_y;max_y<M;max_y++)
max = Max(max,Max_Matrix(min_x,max_x,min_y,max_y));
cout<<max<<endl;
int PS[N+1][M+1];
for(int i = 0;i<=N;i++)
PS[i][0] = 0;
for(int j = 0;j<=M;j++)
PS[0][j] = 0;
for(int i = 1;i<=N;i++)
for(int j= 1;j<=M;j++)
{
PS[i][j] = PS[i-1][j] + PS[i][j-1] - PS[i-1][j-1] + B[i][j];
cout<<PS[i][j]<<" ";
}
//方法二:时间复杂度 N^2 * M^2
cout<<endl;
max = B[1][1];
int min_x,min_y,max_x,max_y;
for(min_x=1;min_x<=N;min_x++)
for(max_x=min_x;max_x<=N;max_x++)
for(min_y=1;min_y<=M;min_y++)
for(max_y=min_y;max_y<=M;max_y++)
{
int sum = PS[max_x][max_y] - PS[max_x][min_y-1] - PS[min_x-1][max_y] + PS[min_x-1][min_y-1];
if(sum > max)
max = sum;
}
cout<<max<<endl;
return 0;
}
#define N 2
#define M 3
using namespace std;
//方法一:时间复杂度为:N^2 * M^2 * Max_Matrix的时间复杂度 = N^3 * M^3
int A[N][M] ={{-1,2,-2},{1,2,1}};
int B[N+1][M+1] ={{0,0,0,0},{0,-1,2,-2},{0,1,2,1}};
int Max(int x,int y)
{
return x>y? x:y;
}
int Max_Matrix(int min_x,int max_x,int min_y,int max_y)
{
int sum=0;
for(int i=min_x;i<=max_x;i++)
for(int j=min_y;j<=max_y;j++)
sum += A[i][j];
return sum;
}
//方法二:用PS保存子矩阵的值,不过数组从(1,1)开始保存值
int main()
{
int max = A[0][0];
for(int min_x=0;min_x<N;min_x++)
for(int max_x=min_x;max_x<N;max_x++)
for(int min_y=0;min_y<M;min_y++)
for(int max_y=min_y;max_y<M;max_y++)
max = Max(max,Max_Matrix(min_x,max_x,min_y,max_y));
cout<<max<<endl;
int PS[N+1][M+1];
for(int i = 0;i<=N;i++)
PS[i][0] = 0;
for(int j = 0;j<=M;j++)
PS[0][j] = 0;
for(int i = 1;i<=N;i++)
for(int j= 1;j<=M;j++)
{
PS[i][j] = PS[i-1][j] + PS[i][j-1] - PS[i-1][j-1] + B[i][j];
cout<<PS[i][j]<<" ";
}
//方法二:时间复杂度 N^2 * M^2
cout<<endl;
max = B[1][1];
int min_x,min_y,max_x,max_y;
for(min_x=1;min_x<=N;min_x++)
for(max_x=min_x;max_x<=N;max_x++)
for(min_y=1;min_y<=M;min_y++)
for(max_y=min_y;max_y<=M;max_y++)
{
int sum = PS[max_x][max_y] - PS[max_x][min_y-1] - PS[min_x-1][max_y] + PS[min_x-1][min_y-1];
if(sum > max)
max = sum;
}
cout<<max<<endl;
return 0;
}
0 0
- 二维子数组之和的最大值
- 子数组之和的最大值(二维)
- 二维子数组之和的最大值
- 二维子数组之和的最大值
- 子数组之和的最大值(二维)
- 子数组之和的最大值(二维)
- 子数组之和的最大值(二维)
- 二维子数组之和的最大值
- 二维数组的子数组之和的最大值
- 【ACM】数组的子数组之和的最大值(二维)
- 子数组之和最大值(二维数组)
- 编程之美 子数组之和的最大值(二维)
- 编程之美---子数组之和的最大值(二维)
- 求子数组之和的最大值(二维)
- 2.15 子数组之和的最大值(二维)
- 数字之魅:子数组之和的最大值[二维]+[三维]
- 一维和二维子数组之和最大值
- 子数组之和的最大值
- Collection:List集合
- iPhone的UITextField-更改占位符文本颜色
- javaweb页面跳转的方法
- Java基础——Java笔记——正则表达式笔记
- GCC知识整理
- 二维子数组之和的最大值
- 3D NDT [20151126]
- 数据插入 效率比较 mysql
- DatagramSocket数据包/UDP
- opencv 学习记录
- linux注意事项
- Java Thread Programming -- 目录
- androidStudio 自定义快捷代码的快捷方式
- Exception处理详解[转]