算法十分臃肿,效率捉鸡,不知用了多少循环,还有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. css多种方法实现已知宽度和未知宽度的元素水平垂直居中

    // html <div class="box-wrapper"> <div class="box"> 内部box <p>更 ...

  2. js 毫秒转换为标准时间

    function dateForm(time){ var unixTimestamp = new Date( 1477386005*1000 ); commonTime = unixTimestamp ...

  3. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  4. Swift 并行编程现状和展望 - async/await 和参与者模式

    这篇文章不是针对当前版本 Swift 3 的,而是对预计于 2018 年发布的 Swift 5 的一些特性的猜想.如果两年后我还记得这篇文章,可能会回来更新一波.在此之前,请当作一篇对现代语言并行编程 ...

  5. html5式程序员表白

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/whqet/article/details/26394493 前端开发whqet,csdn,王海庆,w ...

  6. CentOs7 编译安装PHP7.1.5

    1 创建php用户和用户组,并在github下载php7源码 #######新建php用户和php组 [root@typecodes ~]# groupadd -r www && us ...

  7. Django使用静态文件

    除了由服务器生成的HTML文件外,网页应用一般需要提供其它必要的文件 —— 比如图片文件.JavaScript脚本和CSS样式表 —— 来为用户呈现出一个完整的网站. 在Django中,我们将这些文件 ...

  8. UI之富文本编辑器-UEditor

    在做Web应用时,经常会进行富文本编辑,常用的富文本编辑器有很多,比如CuteEditor.CKEditor.NicEditor.KindEditor.UEditor等等. 在这里为大家推荐百度推出的 ...

  9. 【正则表达式】用js实现千位分隔符,怎么实现?

    (?=pattern)  正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串.这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用.例如,'Windows (?=95|98|NT| ...

  10. javascript实现拖曳与拖放图片

    javascript实现拖曳与拖放图片 其实对于drag和drop拖曳与拖放事件IE很早以前就支持这个操作了,我们先来看看HTML5中新增的拖放API. 在HTML5中想要实现拖放操作,至少要做以下操 ...