博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大子阵列和
阅读量:7202 次
发布时间:2019-06-29

本文共 957 字,大约阅读时间需要 3 分钟。

hoj2558,给定一个矩阵,返回最大子矩阵和。

思考(动态规划):

1.读取的同时和矩阵运算部的矩阵

2.枚举矩阵的行上下边界,固定的上,下边界线之后。

按照部分和矩阵O(1)得到同一列元素的和,转化为1维数组的情况

3.依照一维数组的情况,求最大子数组和的思路是:

能够从后往前计算,每次先算以当前元素A[i]为开头的最大和start

再将start与当前A[i+1:n]所代表的真实最大和进行比較,作为A[i:n]的真实最大和保存起来。

4.输出遍历过程中得到的最大值MAX就可以

cpp代码:

#include
#define SIZE 102#define INF 1000using namespace std;int maxx(int a,int b){ return a>b?

a:b; } int main(){ int n,i,j,k,a,c,tmp,MAX,start,all; int num[SIZE]; int mat[SIZE][SIZE]; while(cin>>n){ //读入矩阵的同一时候计算部分和矩阵 for(j=0;j<=n;j++)mat[0][j]=mat[j][0]=0; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ cin>>mat[i][j]; mat[i][j]+=mat[i-1][j];//累积部分和 } } //開始处理 MAX=-INF; for(a=1;a<=n;a++){ for(c=a;c<=n;c++){//枚举上下边界 start=mat[c][n]-mat[a-1][n]; all=start;//先给数组最后一个元素赋值 for(k=n-1;k>=1;k--){//从后往前计算 tmp=mat[c][k]-mat[a-1][k];//依据部分和算出当前元素值 start=maxx(tmp+start,tmp);//先比較以tmp开头的 all=maxx(start,all);//再比較总的 } if(all>MAX)MAX=all; } } cout<<MAX<<endl; } return 0; }

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
【收藏】Aspose.Pdf应用教程
查看>>
PHP使用星号隐藏用户名,手机,邮箱的实现方法
查看>>
C++ 指针—01 指针与数组的对比
查看>>
推荐6款常用的Java开源报表制作工具
查看>>
CentOS mini安装环境下安装私有YUM服务器
查看>>
mysql case when 多参数条件语法
查看>>
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
查看>>
实现JSON在线美化(格式化)、JSON转CSV、CSV转XML工具-toolfk程序员工具网
查看>>
Combine Two Tables[leetcode]
查看>>
Linux环境变量
查看>>
Python2 进程扫描脚本
查看>>
JQuery EasyUI 日期控件如何控制日期选择区间
查看>>
scrapy ImportError: No module named items
查看>>
jboss7.1.1配置jndi
查看>>
JSP里request变量列表
查看>>
#python#面向对象练手+模仿Amazon的物流追踪显示
查看>>
器者,道之所载
查看>>
谁能告诉我mybatis中使用#和$的区别?
查看>>
GCD死锁
查看>>
JVM
查看>>