求二维数组联通子数组和的最大值 (联通涂色) beta!
算法十分臃肿,效率捉鸡,不知用了多少循环,还有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!的更多相关文章
- 求二维数组最大子数组的和。郭林林&胡潇丹
求二维数组子数组的最大值,开始思路不太清晰.先从最简单的开始. 以2*2的简单数组为例找规律, 假设最大数为a[0][0],则summax=a[0][0],比较a[0][0]+a[0][1].a[0] ...
- 求数组的子数组之和的最大值III(循环数组)
新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...
- Problem N: 求二维数组中的鞍点【数组】
Problem N: 求二维数组中的鞍点[数组] Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2764 Solved: 1728[Submit][S ...
- 求数组的子数组之和的最大值II
这次在求数组的子数组之和的最大值的条件下又增加了新的约束: 1.要求数组从文件读取. 2.如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保 ...
- Task 4.5 求二维数组中的最大连通子数组之和
任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将 ...
- C#中求数组的子数组之和的最大值
<编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...
- 求数组的子数组之和的最大值IV
在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...
- 求二维数组的最大子数组———曹玉松&&蔡迎盈
继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...
- N元数组的子数组之和的最大值
题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...
随机推荐
- ntp时间服务器--Linux配置
时间服务器作用: 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同步的标准时间用于记录各种事件发生时序, 如E-MAIL信息.文件创建和访问时间.数据库处理时间等. 大数据系统内不同 ...
- jstl格式化日期
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import=& ...
- 在react中使用intro.js的的一些经验
react逐渐热了起来,但是新的东西毕竟前辈的经验少一些,前段时间自己在react中用到intro.js时,得到的资料甚少,摸索后便将一些心得记录下来了~ 1 intro.js的引入,这一点请看上一篇 ...
- CentOS7+Nginx设置Systemctl restart nginx.service服务
centos 7上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度.关于 ...
- Apache服务器的安装与配置
文档:http://httpd.apache.org/docs/2.4/ 指令:http://httpd.apache.org/docs/2.4/mod/core.html 一.配置文件 语法 * 主 ...
- 网络侦查与网络扫描-P201421410029
中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告 实验一 网络侦查与网络扫描 学生姓名 李政浩 年级 2014 ...
- Ubuntu16.04之开发环境构建
Ubuntu软件安装相对于centos而言,那真的是要愉快的多啊! 以下安装步骤,本人在公司的测试环境和开发环境以及之前个人虚拟机的测试或生产环境都测验过,基本没有问题,只要按照步骤来,即可马到成功! ...
- centos 7 配置iptables(转) + iptabes规则理解
一.防火墙配置 1.检测并关闭firewall 1 2 3 4 5 systemctl status firewalld.service #检测是否开启了firewall systemctl st ...
- mysql的查询使用explain的讲解
摘自:http://www.jb51.net/article/33736.htm 在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于 ...
- ASP.NET Core的Kestrel服务器(转载)
Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core模板项目使用Kestrel作为默认的web服务器.Kes ...