最大字段和+最大子矩阵算法模板
2016-02-20 21:07
260 查看
#include<iostream> #include<cstring> using namespace std; int a[101][101],b[101]; int dp(int a[],int n)//求最大子段和函数 { int sum = 0,max = 0; for (int i=0; i<n; i++) { sum += a[i]; if (sum < 0)sum = 0;//如果当前和小于0则为清0 if (sum > max)max = sum;//进行最大和的迭代 } return max; }
//求最大子矩阵:将二维数组压缩成一维数组。如a[i][0]....a[i][n-1],,,,,,,a[j][0]....a[j][n-1]存在最大子矩阵,则将i~j行之间的列号相同的元素累加起来暂存在数组
Z[0~n-1]中,这样最大子矩阵问题就转化为了最大字段和问题。int main(){int i,j,n;while (cin >> n){for (i=0; i<n; i++)for (j=0; j<n; j++)cin >> a[i][j];int sum=0,max = 0;for (i=0; i<n; i++)//枚举最大子矩阵所在的行的范围 上行号for (j=i; j<n; j++) //下行号 (下行号大于等于上行号){memset(b,0,sizeof(b));for (int z=0; z<n; z++)//枚举所有的列号for (int k=i; k<=j; k++)//将行范围之间的元素累加起来,存与数组b中b[z] += a[k][z];sum = dp(b,n);if (max < sum)max = sum;//迭代出最大的子矩阵}cout << max << endl;}return 0;}
相关文章推荐
- Android开发学习之路--网络编程之xml、json
- 2014年辛星解读Javascript之DOM之冒泡和捕获
- 在sdCard存图
- 字符串scanf,getchar,gets,printf,putchar输入输出小测试
- Apache Mesos:数据中心就是计算机
- SSH框架使用中存在的诡异异常
- View动画属性
- 247,AFNetworking 3的使用
- 在 centos 下建立 ftp 服务器
- 微信公开课系列视频 观后感
- SwipeRefreshLayout下拉刷新控件
- 2.3.5笔记-双向链表
- LeetCode -- Maximum Product Subarray
- Sqlite
- 246,使用宏定义定义NSLog调试输出
- [ZJOI 2013]K大数查询
- Netron开发快速上手(一):GraphControl,Shape,Connector和Connection
- 20160220 - JavaScript for OS X Automation 调试技巧
- Shape
- MyCat - 使用篇(5)