最大子段和的以为与二维求解
来源:互联网 发布:写英语论文的软件 编辑:程序博客网 时间:2024/04/25 20:54
一维最大子段和很简单
int ans=0,dp=0;for(int i=1;i<n;i++) if(dp>0) dp+=a[i]; else dp=a[i];
输入
第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开。(-10^9 <= M[i] <= 10^9)
输出
输出和的最大值。如果所有数都是负数,就输出0。
输入示例
3 3-1 3 -12 -1 3-3 1 2
输出示例
7
如果是二维的话,就把它转化成一维:
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;typedef long long LL;const int maxn=505;int d[maxn][maxn];LL c[maxn],dp,l[maxn];int main(){ int n,m; LL ans; while(~scanf("%d%d",&m,&n)) { ans=0; for(int i=1;i<=n;i++) { for( int j=1;j<=m;j++) scanf("%d",&d[i][j]); } memset(c,0,sizeof(c)); ///m行n列 for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { dp=0; for(int k=1;k<=m;k++) { c[k]=(j==i)?(d[i][k]):(c[k]+d[j][k]);///关键地方 if(dp>0) dp+=c[k]; else dp=c[k]; ans=max(ans,dp); } } } printf("%lld\n",ans); } // cout << "Hello world!" << endl; return 0;}
0 0
- 最大子段和的以为与二维求解
- 最大子段和的求解
- 最大子段和的求解
- 求解最大子段和
- c++ 求解数列最大的两个子段和
- 最大子段和 O(n)求解
- 最大子段和(分而治之求解)
- 动态规划求解最大子段和
- 最大子段和暴力求解
- hoj 2558 二维最大子段和
- Maximum sum 二维最大子段和
- 连续子数组最大和或最大子段和的求解算法及其正确性
- 算法设计与分析——动态规划方法求解序列的连续最大子段和
- 最大子段和系列(二维子段和、环形数组子段和、最大m段和) 思路
- 最大子段和(动态规划法求解)
- 直接算法+动态规划算法求解最大子段和
- 算法设计与分析——动态规划方法求解序列的连续最大子段
- 【数据结构与算法】最大子序列和问题的求解
- 118. Pascal's Triangle
- Activity中ConfigChanges属性的用法
- Mysql 里CHAR和VARCHAR的最大长度及一些注意事项
- Ubuntu14.04交叉编译U-Boot
- fedora 的学习历程
- 最大子段和的以为与二维求解
- 空心三角形(图形的输出)c语言
- 十七、代理设计模式
- linux下的简单文件服务器和客户端程序
- POJ 2942 Knights of the Round Table(点双联通+二分图+染色)
- 莫比乌斯反演模板
- SQL中 group by 1, order by 1 语句是什么意思
- Object-c------计算代码行数小demo
- Android View 事件分发机制梳理