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. C# 目录与文件管理

    文件读写 学习了一点点希望对以后的学习工作有帮助 在应用程序中基本任务是对数据的操作,这就是对数据进行访问和保存挤兑数据的读写,应用程序访问一个文本文件叫做“读”:对文本文件的内容进行修改后保存这些修 ...

  2. 2014年度辛星css教程夏季版第一节

    CSS是Cascading Style Sheets的缩写,即层叠样式表,它用于表现HTML的样式,即HTML只是去写该网页有哪些内容,至于如何去表现它们,由CSS去定制. ************* ...

  3. Eclipse启动Tomcat错误:Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already(转载)

    转载自:http://blog.csdn.net/aigochina/article/details/7891107 Eclipse启动Tomcat错误: Several ports (8080, 8 ...

  4. <一> SQL 基础

    删除数据库 drop database database-name 创建新表格 create table tablename (col1 type1 [not null] [primary key], ...

  5. 触发UIButton长按事件

    UIButton *aBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [aBtn setFrame:CGRectMake(40, 100, 60,  ...

  6. javascript随手记

    编码规范 避免使用全局变量 写在所有函数外面的变量就是全局变量. 之所以要避免使用全局变量是因为:如果有多个类库的话,它们都定义了一个名字的变量.这时候后引入的类库中该变量的值就会覆盖前面引入的类库中 ...

  7. apt-get命令讲解

    apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统. apt-get是debian,ubuntu发行版的包管理工具 ...

  8. 南方数据企业0day

    漏洞影响版本 v10.0 v11.0 关键字:inurl:”HomeMarket.asp” 默认后台:/admin 直接爆用户密码: http://www.xxx.com/NewsType.asp?S ...

  9. php重定向跳转

    一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型("Co ...

  10. 李洪强漫谈iOS开发[C语言-021]-运算符