算法十分臃肿,效率捉鸡,不知用了多少循环,还有bug...任重道远,编程之美。

思想:按行遍历,找出每行的最大子数组。若行间都联通,行最大子数组相加后,再加上独立的正数。若行间不连通,找出较大子路径,再加上独立正数。

但是!有bug,写完之后想到的:每一行的最大子数组中的负数,有可能是不需要加上的。还没想好。

#include<iostream>
using namespace std; /*int yiwei_max(int n,int a[],int *p,int *q) //自己写的函数,返回下标有问题,网上找了个核心思想和变量完全一样的。
{
int temp=0,sum=-999999999,timer=-1;
for(int i=0;i<n;i++)
{
if(temp>0)
{
temp+=a[i];
}
else
{
temp=a[i];
}
if(temp>sum)
{
sum=temp;
*q=i;
timer++;
}
}
*p=*q-timer;
return sum;
}*/ int max_sum(int n,int a[],int *besti,int *bestj)
{
int *b = (int *)malloc(n * sizeof(int));
int sum = ;
int i = -;
int temp = ; for (i=;i<=n-;i++)
{
if (temp > )
{
temp += a[i];
}
else
{
temp = a[i];
}
b[i] = temp;
} sum = b[];
for (i=;i<=n-;i++)
{
if (sum < b[i])
{
sum = b[i];
*bestj = i;
}
} for (i = *bestj;i >= ;i--)
{
if (b[i] == a[i])
{
*besti = i;
break;
}
}
free(b);
return sum;
} void main()
{
int a[][],b[];
int up[],down[],t[];
int i,j,m,n,x,y;
int temp,t2;
int l=,u=,l_down,l_up,n_down,n_up;
int s; cout<<"几行几列?"<<endl;
cin>>m>>n;
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
cin>>a[i][j];
}
} for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
b[j]=a[i][j];
}
//temp=yiwei_max(n,b,&x,&y);
temp=max_sum(n,b,&x,&y);
up[i]=x; //记录每行下标、上标和最大值。
down[i]=y;
t[i]=temp;
} t2=t[];
for(i=;i+<m;i++)
{
if(up[i]<=down[i+] && down[i]>=up[i+])
{
t2+=t[i+];
}
else
{
l_down=down[i];
l_up=up[i];
n_up=up[i+];
n_down=down[i+]; if(down[i]<up[i+]) //求数组两条路径的较大值
{
for(;l_down!=up[i+];)
{
l+=a[i][++l_down];
} for(;n_up!=down[i];)
{
u+=a[i+][--n_up];
}
} if(up[i]>down[i+])
{
for(;l_up!=down[i+];)
{
l+=a[i][--l_up];
} for(;n_down!=up[i];)
{
u+=a[i+][++n_down];
}
} s=l>u?l:u; if(s+t[i+]>)
{
t2+=t[i+]+s;
}
}
for(j=up[i];j<down[i];j++)
{
if(a[i+][j]>) t2+=a[i+][j]; //判别独立正数
}
} cout<<t2<<endl;
}

求二维数组联通子数组和的最大值 (联通涂色) beta!的更多相关文章

  1. 求二维数组最大子数组的和。郭林林&胡潇丹

    求二维数组子数组的最大值,开始思路不太清晰.先从最简单的开始. 以2*2的简单数组为例找规律, 假设最大数为a[0][0],则summax=a[0][0],比较a[0][0]+a[0][1].a[0] ...

  2. 求数组的子数组之和的最大值III(循环数组)

    新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...

  3. Problem N: 求二维数组中的鞍点【数组】

    Problem N: 求二维数组中的鞍点[数组] Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2764  Solved: 1728[Submit][S ...

  4. 求数组的子数组之和的最大值II

    这次在求数组的子数组之和的最大值的条件下又增加了新的约束:  1.要求数组从文件读取.      2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保 ...

  5. Task 4.5 求二维数组中的最大连通子数组之和

    任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将 ...

  6. C#中求数组的子数组之和的最大值

    <编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...

  7. 求数组的子数组之和的最大值IV

    在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...

  8. 求二维数组的最大子数组———曹玉松&&蔡迎盈

    继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...

  9. N元数组的子数组之和的最大值

    题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...

随机推荐

  1. bower包管理工具

    安装: npm install bower -g (全局安装) 验证: bower --version 指令( 以vue为例 ): 1.  bower info vue              查看 ...

  2. centos下安装pip-python

    pyspider需要通过pip工具安装 首先检查linux有没有安装python-pip包,直接执行 yum install python-pip 没有python-pip包就执行命令 yum -y ...

  3. leetcode367--Valid Perfect Square

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  4. POJ 2932 Coneology计算最外层圆个数

    平面上有n个两两没有公共点的圆,i号圆的圆心在(xi,yi),半径为ri,编号从1开始.求所有最外层的,即不包含于其他圆内部的圆.输出符合要求的圆的个数和编号.n<=40000. (注意此题无相 ...

  5. static成员函数不能调用non-static成员函数

    1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...

  6. 解决 配置springmvc拦截所有请求后请求静态资源404的问题

    <servlet-mapping> <servlet-name>spring-servlet</servlet-name> <url-pattern>/ ...

  7. 谷歌商店高级搜索 Google play advanced search

    这个问题一直搜索了很久都没有答案,后来在StackOverflow上提问,很久也没人回答. 详见我的SO:https://stackoverflow.com/questions/52939493/ho ...

  8. effective c++ 笔记 (1-3)

    // //  effective c++.cpp //  笔记 // //  Created by fam on 15/3/23. // // //-------------------------- ...

  9. JS基础内容小结(event 鼠标键盘事件)(三)

    var ev=ev||event 兼容性处理 得到焦点为 onfocus 失去焦点 onblur return false能阻止部分函数的执行 obj.select 选择指定元素里的文本内容 ———— ...

  10. docker之Dokcerfile 常用指令

    一.Docker语法 Docker语法: FROM 基础镜像base image RUN 执行命令 ADD 添加文件 COPY 拷贝文件 CMD 执行命令 EXPOSE 执行命令 WORKDIR 指定 ...