UVa 108: Maximum Sum
来源:互联网 发布:阿里云服务器怎么开通 编辑:程序博客网 时间:2024/05/17 09:26
这道题用暴力解法+动态规划。分析如下:
对于某个1*m的矩阵,即一个数列,求其maximal sub-rectangle,可以通过求最大长连续字串和来求得(这个用到了动态规划)。
那么对于n*m的矩阵,将每列的各个数字求和,将得到一个1*m的矩阵,用上文所说的方法求得的最大和即为该n*m矩阵的所有行数为n的子矩阵中的最大子矩阵和。
那么这道题,通过枚举所有行数为1、2、3.....N 的矩阵(暴力),分别用上述方法压缩矩阵求最大连续字串和,找出其中最大值,即为所求结果。
我的解题代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <string>#include <algorithm>using namespace std;int table[100][100];int sum[100];int N;int max_continuous_sum(){int maxs=0,s=0;for(int i=0; i<N; i++){if(s>=0) s+=sum[i];else s=sum[i];maxs = maxs>s ? maxs : s;}return maxs;}int main(){cin >> N;int maxsum=0;int tmp;for(int i=0; i<N; i++){for(int j=0; j<N; j++){cin >> table[i][j];sum[j]=table[i][j];}tmp = max_continuous_sum();maxsum = maxsum>tmp ? maxsum : tmp;for(int j=i-1; j>=0; j--){for(int k=0; k<N; k++)sum[k]+=table[j][k];tmp = max_continuous_sum();maxsum = maxsum>tmp ? maxsum : tmp;}}cout << maxsum << endl;return 0;}
- UVa 108 - Maximum Sum
- UVa 108 - Maximum Sum
- uva 108 - Maximum Sum
- UVa 108 - Maximum Sum
- UVa 108 - Maximum Sum
- UVa:108 Maximum Sum
- UVa 108: Maximum Sum
- UVA - 108 Maximum Sum
- UVA 108 Maximum Sum
- uva 108 Maximum Sum
- UVa 108 - Maximum Sum
- UVA 108 Maximum Sum
- UVA - 108 Maximum Sum
- uva 108 Maximum Sum
- uva 108 Maximum Sum
- Uva 108 Maximum Sum
- Uva 108 Maximum Sum
- UVa OJ 108-Maximum Sum
- cocos2dx内存管理的一些看法
- Codeigniter中禁止A Database Error Occurred错误提示
- android版百度地图 自定义 点击当前位置弹出气泡
- LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用
- 使用json-lib进行json操作
- UVa 108: Maximum Sum
- 一个奇葩问题
- 微信公众平台
- 容器的插队原则,移动容器元素位置。
- 拥抱 Rails 4 —— 详述 Rails 4 的新变化
- linux 查看压缩包里文件
- 有名管道
- HTML5与原生APP之争胜负已出?
- JS 获取浏览器和屏幕宽高等信息