poj1050:http://poj.org/problem?id=1050

* maximum-subarray 问题的升级版本~

本题同样是采用DP思想来做,同时有个小技巧处理:就是把二维数组看做一维数组。怎么去看呢,我们可以吧具有同样列号的数捆绑到一起,比如 a[1][1], a[2][1], a[3][1]....。我们可以吧他们都看做 'a[1]'。因为最终的解是矩阵行数n中的任意一段,比如说:第p行到第q行, (1<=p<=q<=n), 我们要得到最终解,就一定要逐一枚举p,q。

* 如果p==q的话,就说明当前考察的矩阵只有一行,所以问题就很简单啦,在这一行上利用maximum-subarray DP解法就可以得到子矩阵a[p或者q][1...n]的最大和S1。

* 如果p!=q时,说明考察的巨狠是多行的,为了把多行变成‘一行‘,我们可以吧从p行到q行的矩阵同一列的值相加,比如:

第p行:       a[p][1],  a[p][2], .... ,  a[p][n]

第p+1行:a[p+1][1],  a[p+1][2], ... ,  a[p+1][n]

..........

第q行:     a[q][1],  a[q][2], ... ,  a[q][n]

相加---!> a[p][1]+...+a[q][1] , ... ,     a[p][n]+...+a[q][n]

这样我们在这个新的一维矩阵上又可以进行maximum-subarray DP解法,得到最大和S2。

并且每一次枚举p,q时得到的S1或者S2,我们都要和最终结果ans进行比较,将其中较大的值存入ans中。

细节看代码:

 1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<cstring>
5 using namespace std;
6 const int max_size=101;
7 const int inf=(1<<30);
8 int a[max_size][max_size];
9 int n;
10 int main(){
11 scanf("%d",&n);
12 memset(a,0,sizeof(a));
13 for(int i=1;i<=n;i++){
14 for(int j=1;j<=n;j++){
15 scanf("%d",&a[i][j]);
16 if(i>=2) a[i][j]+=a[i-1][j];
17 }
18 }
19 //int *tmp=new int[(n+1)*n][m+1];
20 int ans=-inf,sum;
21 for(int i=1;i<=n;i++){
22 //memset(tmp,0,sizeof(tmp));
23 for(int j=i;j<=n;j++){
24 if(j==i) sum=a[i][1];
25 else sum=a[j][1]-a[i-1][1];
26 for(int k=2;k<=n;k++){
27 if(j==i){
28 if(sum>0){
29 sum+=a[i][k];
30 }
31 else{
32 sum=a[i][k];
33 }
34 if(sum>ans) ans=sum;
35 }
36 else{
37 if(sum>0){
38 sum+=a[j][k]-a[i-1][k];
39 }
40 else{
41 sum=a[j][k]-a[i-1][k];
42 }
43 if(sum>ans) ans=sum;
44 }
45 }
46 }
47 }//end for
48 printf("%d\n",ans);
49 }

POJ1050:To the max的更多相关文章

  1. 页面上有3个输入框:分别为max,min,num;三个按钮:分别为生成,排序,去重;在输入框输入三个数字后,先点击生成按钮,生成一个数组长度为num,值为max到min之间的随机整数点击排序,对当前数组进行排序,点击去重,对当前数组进行去重。 每次点击之后使结果显示在控制台

    <!DOCTYPE html> <html> <head> <!-- 页面上有3个输入框:分别为max,min,num:三个按钮:分别为生成,排序,去重: 在 ...

  2. 【poj1050】 To the Max

    http://poj.org/problem?id=1050 (题目链接) 题意 求二维最大子矩阵 Solution 数据好像很水,N最大才100,N^4大暴力都可以随便水过. 其实有N^3的做法.枚 ...

  3. C语言:min和max头文件

    转自:http://www.cppblog.com/jince/archive/2010/09/14/126600.html min和max头文件 虽然说求最大值最小值函数在哪个头文件下并不是非常重要 ...

  4. HDU1081:To The Max(最大子矩阵,线性DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1081 自己真够垃圾的,明明做过一维的这种题,但遇到二维的这种题目,竟然不会了,我也是服了(ps:猪啊). ...

  5. 【LeetCode】:二叉树的Max,Min深度

    一.最大深度问题 描述: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes a ...

  6. POJ 1050:To the Max

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43241   Accepted: 22934 Desc ...

  7. 聚合函数:sum,avg,max,min,count

    group by  分组的使用方法 数学函数:ABS.ceiling.floor.power.round.sqrt.square 练习:

  8. SQL2005:使用varchar(max)代替text

    SQL Server 2005 联机丛书 中文相关说明 1.在 Microsoft SQL Server 的未来版本中将删除 ntext.text 和 image 数据类型.请避免在新开发工作中使用这 ...

  9. 数据结构:HDU 2993 MAX Average Problem

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. can't add foreign key in mysql?

    create table department (dept_name ), building ), budget numeric(,) ), primary key (dept_name) ); cr ...

  2. dtv_driver.ko

            替换dtv_driver.ko .步骤:         shell@android:/ # get_rootfs.sh                                 ...

  3. repo manifest xml 文件修改后提交命令

    git push origin dev(本地分支):refs/for/tv/Internal_Jb910_develop_t

  4. Core管道中的处理流程3

    通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的? 在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下 ...

  5. 粗略阅读《Agile Software Development》后的感想

    大致配合翻译和词典阅读了一下这篇文章之后,我另外还查阅了维基百科.百度百科和MBA智库百科还有一些网络上的文章.对敏捷开发有了一个大致上的浅显的认识. 敏捷建模(Agile Modeling,AM)的 ...

  6. python编码基础知识

    http://www.javaeye.com/topic/560229 一 预备知识 字符集1, 常用字符集分类ASCII及其扩展字符集作用:表语英语及西欧语言.位数:ASCII是用7位表示的,能表示 ...

  7. IDEA如何打包可运行jar的一个问题。

    转自http://bglmmz.iteye.com/blog/2058785 背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包:或者某些项目不是WEB应用,纯粹是后台应用,发 ...

  8. HTML5文件拖拽

    HTML5新增的File API, 可以获取名称.文件大小.类型等信息,需先对DOM中的Element进行拖拽事件绑定 相关API 首先获取节点,绑定拖动到该节点的事件,可以改变鼠标形状 var dr ...

  9. 坑爹的UICollectionView

    最近用UICoolectionView的时候遇到一个很DT的问题,我往VC里加12个视图,结果显示成这样(右边是期待的样子):       研究了一下午,终于发现了问题: @interface FpL ...

  10. Keepalived+MySQL双主

    一.Keepalived+MySQL Replication的应用场景 MySQL的高可用方案有cluster,MMM,MHA等,这些高可用方案都要三台服务器以上,成本有点高,今天介绍一个低成本高可用 ...