最大子矩阵
来源:互联网 发布:数据挖掘及应用是什么 编辑:程序博客网 时间:2024/05/29 10:28
比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
40 -2 -7 0 9 2 -6 2-4 1 -4 1 -18 0 -2
15
#include<iostream>
using namespace std;
int a[101][101],b[101];
int js(int b[200],int n)
{
int i,max,c;
c=0;max=0;
for(i=1;i<n;i++)
{
if(c>0)
c+=b[i];
else c=b[i];
if(max<c)
max=c;
}
return max;
}
int main()
{
int i,j,n,max,sum,k;
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cin>>a[i][j];
}
max=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
b[j]=0;
for(j=i;j<=n;j++)
{ for(k=1;k<=n;k++) b[k]+=a[j][k];
sum=js(b,n);
if(max<sum)
max=sum;
}
}
cout<<max<<endl;
}
滚动数组,先让行相加再选列,问题变成了最大字段和,用一维数组代表列,赋初值为零。
using namespace std;
int a[101][101],b[101];
int js(int b[200],int n)
{
int i,max,c;
c=0;max=0;
for(i=1;i<n;i++)
{
if(c>0)
c+=b[i];
else c=b[i];
if(max<c)
max=c;
}
return max;
}
int main()
{
int i,j,n,max,sum,k;
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cin>>a[i][j];
}
max=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
b[j]=0;
for(j=i;j<=n;j++)
{ for(k=1;k<=n;k++) b[k]+=a[j][k];
sum=js(b,n);
if(max<sum)
max=sum;
}
}
cout<<max<<endl;
}
滚动数组,先让行相加再选列,问题变成了最大字段和,用一维数组代表列,赋初值为零。
0 0
- 最大子矩阵问题
- 最大子矩阵模板
- 最大子矩阵问题
- 最大子矩阵问题
- 最大01 子矩阵
- 最大子矩阵问题
- 最大子矩阵
- 最大子矩阵问题
- 最大子矩阵和
- 最大子矩阵问题
- 最大子矩阵问题:
- 最大子矩阵和
- 最大子矩阵之和
- 最大子矩阵问题
- 最大子矩阵和
- 最大二维子矩阵
- 最大子矩阵问题
- 最大子矩阵和
- Web 图片Base64编码
- Exynos4412 uboot2013.1移植B
- Android studio导入Github上的library开源库
- 计算机专用英语词汇1500词
- 设计模式-策略模式
- 最大子矩阵
- SDU 1247 LCA
- 枚举
- 1015. 德才论 (25)
- 概率DP
- bzoj 3887 tarjan+拓扑排序
- Android自定义仪表盘
- ios--Quartzcore核心动画框架的学习
- 树套树-线段树套线段树