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

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

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

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. /*int yiwei_max(int n,int a[],int *p,int *q) //自己写的函数,返回下标有问题,网上找了个核心思想和变量完全一样的。
  5. {
  6. int temp=0,sum=-999999999,timer=-1;
  7. for(int i=0;i<n;i++)
  8. {
  9. if(temp>0)
  10. {
  11. temp+=a[i];
  12. }
  13. else
  14. {
  15. temp=a[i];
  16. }
  17. if(temp>sum)
  18. {
  19. sum=temp;
  20. *q=i;
  21. timer++;
  22. }
  23. }
  24. *p=*q-timer;
  25. return sum;
  26. }*/
  27.  
  28. int max_sum(int n,int a[],int *besti,int *bestj)
  29. {
  30. int *b = (int *)malloc(n * sizeof(int));
  31. int sum = ;
  32. int i = -;
  33. int temp = ;
  34.  
  35. for (i=;i<=n-;i++)
  36. {
  37. if (temp > )
  38. {
  39. temp += a[i];
  40. }
  41. else
  42. {
  43. temp = a[i];
  44. }
  45. b[i] = temp;
  46. }
  47.  
  48. sum = b[];
  49. for (i=;i<=n-;i++)
  50. {
  51. if (sum < b[i])
  52. {
  53. sum = b[i];
  54. *bestj = i;
  55. }
  56. }
  57.  
  58. for (i = *bestj;i >= ;i--)
  59. {
  60. if (b[i] == a[i])
  61. {
  62. *besti = i;
  63. break;
  64. }
  65. }
  66. free(b);
  67. return sum;
  68. }
  69.  
  70. void main()
  71. {
  72. int a[][],b[];
  73. int up[],down[],t[];
  74. int i,j,m,n,x,y;
  75. int temp,t2;
  76. int l=,u=,l_down,l_up,n_down,n_up;
  77. int s;
  78.  
  79. cout<<"几行几列?"<<endl;
  80. cin>>m>>n;
  81. for(i=;i<m;i++)
  82. {
  83. for(j=;j<n;j++)
  84. {
  85. cin>>a[i][j];
  86. }
  87. }
  88.  
  89. for(i=;i<m;i++)
  90. {
  91. for(j=;j<n;j++)
  92. {
  93. b[j]=a[i][j];
  94. }
  95. //temp=yiwei_max(n,b,&x,&y);
  96. temp=max_sum(n,b,&x,&y);
  97. up[i]=x; //记录每行下标、上标和最大值。
  98. down[i]=y;
  99. t[i]=temp;
  100. }
  101.  
  102. t2=t[];
  103. for(i=;i+<m;i++)
  104. {
  105. if(up[i]<=down[i+] && down[i]>=up[i+])
  106. {
  107. t2+=t[i+];
  108. }
  109. else
  110. {
  111. l_down=down[i];
  112. l_up=up[i];
  113. n_up=up[i+];
  114. n_down=down[i+];
  115.  
  116. if(down[i]<up[i+]) //求数组两条路径的较大值
  117. {
  118. for(;l_down!=up[i+];)
  119. {
  120. l+=a[i][++l_down];
  121. }
  122.  
  123. for(;n_up!=down[i];)
  124. {
  125. u+=a[i+][--n_up];
  126. }
  127. }
  128.  
  129. if(up[i]>down[i+])
  130. {
  131. for(;l_up!=down[i+];)
  132. {
  133. l+=a[i][--l_up];
  134. }
  135.  
  136. for(;n_down!=up[i];)
  137. {
  138. u+=a[i+][++n_down];
  139. }
  140. }
  141.  
  142. s=l>u?l:u;
  143.  
  144. if(s+t[i+]>)
  145. {
  146. t2+=t[i+]+s;
  147. }
  148. }
  149. for(j=up[i];j<down[i];j++)
  150. {
  151. if(a[i+][j]>) t2+=a[i+][j]; //判别独立正数
  152. }
  153. }
  154.  
  155. cout<<t2<<endl;
  156. }

求二维数组联通子数组和的最大值 (联通涂色) 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. Mac上编译OpenJDK过程记录

    编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型.机子具体环境的不同,很难有资料能够一步到位.还是得碰到具体问题通过上网查来一个个解决. 下载OpenJDK ...

  2. BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  3. RMAN常用命令汇总!

    进入RMAN:$ rman target sys/oracle@orcl   --远程连接到rman$ rman target sys/oracle@orcl @backup_db.ram   --远 ...

  4. STlinkSWD模式连线方式

    若使用SWD模式,则只需要连接4根线,7,9,20,1即SWDIO,SWDCLK,GND,VCC.VCC为3.3V

  5. ping和telnet

    ping命令 验证IP的可达性 本地ping虚拟机中的ip地址: telnet命令 验证服务的可用性,某个端口是否打开 连接到服务器的端口上: 几种场景: (1)ping通,telnet不行 ip地址 ...

  6. Python2.7-os.path

    os.path 模块,实现了对文件路径的操作,但是不操作文件.由于不同系统文件路径格式不同,os.path 总是调用适合当前系统的版本,你也可以手动导入别的系统的(posixpath,ntpath,m ...

  7. day51

    JS基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通表达式 // 0 ...

  8. spring-boot dubbo项目使用docker方式部署

    项目结构 本项目采用maven构建,有三个模块,分别是pms-interfaces, pms-services, pms-portal. 模块 描述 pms-interfaces 接口层,只能存放实体 ...

  9. 软件设计、DDD概念及落地时的一些零碎思考和记录2

    主要是项目中一些落地经验和记录 技术人员.开发人员 大部分程序员真的不善于沟通,经常会显得很保守: 他们技术上的困惑.误解乃至郁闷都很难直接的表达清楚: 他们对自己的错误"印象"很 ...

  10. 基于TLS证书手动部署kubernetes集群(上)

    一.简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容器集群管理系统衍生 ...