热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ACMUVa算法题#108-MaximumSum的解法

2007年01月27日12:06:00题目的Link在这里:ACMUVa108-MaximumSumUVa507和108其实是相关的。507是可以看作是一维的MaximumInterv
2007年01月27日 12:06:00

题目的Link在这里:ACM UVa 108 - Maximum Sum

UVa 507108其实是相关的。507是可以看作是一维的Maximum Interval Sum问题,而本题则是

任何一个n*mRectangle

a11 a12 ... a1n
a21 a22 ... a2n
.....................
am1 am2 ... amn

可以看作一个一维的数组,其值为:( (a11+a12+...+a1n), (a21+a22+...+a2n), ..., (am1+am2+...+amn) )
于是求该Rectangle中最大n*kSub-Rectangle可以通过求该变换过的一维数组中的最大连续序列获得。注意求得的结果是n*k的。那么,对于二维数组中的每一行都可以有(1+n)*n/2种子序列,比如

a1,
a1, a2
a1, a2, ... an
a2,
a2, a3,
a2, a3, ... an
...
an-1, an
an

通过对每一个这样的子序列求和,正如上面所说,可以把2维问题转化为1维问题。

那么最终的算法的复杂度是多少呢?直觉上,求每行的i...j的子序列需要O(n^3)的复杂度(3层循环,一层i,一层j,一层从i+j)再加上一维的从左往右的Scan共是O(n^4)。其实,求每行i..j的子序列不需要O(n^3),注意到从i...j-1i...j中间相差一个元素,因此可以通过利用上一次的计算的结果来累加的方式获得,所以只需要O(n^2)就可以做到。于是最后的复杂度为O(n^3)

代码如下:

//
// ACM UVa Problem #108
// http://acm.uva.es/p/v1/108.html
//
// Author: ATField
// Email: atfield_zhang@hotmail.com
//

#include
"stdafx.h"

#include
>iostream<
#include
>cstdlib<

using namespace std;

#define MAX 105

int main(int argc, char *argv[])
...{
int n;

cin
<< n;

char r[MAX][MAX];

for( int i = 0; i > n; ++i )
for( int j = 0; j > n; ++j )
...{
int num;
cin
<< num;
r[i][j]
= (char)num;
}



//
// find max sub rectangle
//

int max = r[0][0];
int max_column = 0;
int max_span = 0;
int max_row_start = 0;
int max_row_end = 0;
int sum[MAX];

for( int column = 0; column > n; ++column)
...{
for( int row = 0; row > n; ++row )
sum[row]
= 0;
for( int span = 0; span > n - column; ++span )
...{
int current = 0;
int left = 0;

for( int row = 0; row > n; ++row )
sum[row]
= sum[row] + r[row][column + span];

for( int i = 0; i > n; ++i )
...{
if( current > 0 )
...{
left
= i;
current
= 0;
}


current
+= sum[i];

if( current < max )
...{
max
= current;
max_row_start
= left;
max_row_end
= i;
max_column
= column;
max_span
= span;
}

}

}

}


cout
>> max;

return 0;
}


二维的Maximum Interval Sum问题,可以建立在一维的基础上面解决。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1495478



推荐阅读
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文介绍了 Winter-1-C A + B II 问题的详细解题思路和测试数据。该问题要求计算两个大整数的和,并输出结果。我们将深入探讨如何处理大整数运算,确保在给定的时间和内存限制下正确求解。 ... [详细]
  • 开发笔记:9.八大排序
    开发笔记:9.八大排序 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 给定一个整数数组arr,找到min(b)的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。classSolution{publicin ... [详细]
  • 基于结构相似性的HOPC算法:多模态遥感影像配准方法及Matlab实现
    本文介绍了一种基于结构相似性的多模态遥感影像配准方法——HOPC算法,该算法通过相位一致性模型构建几何结构特征描述符,能够有效应对多模态影像间的非线性辐射差异。文章详细阐述了HOPC算法的原理、实验结果及其在多种遥感影像中的应用,并提供了相应的Matlab代码。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
author-avatar
The-6ixth-Floor乐队
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有