最大字段和问题
- 格式:doc
- 大小:91.00 KB
- 文档页数:3
按条件求取最⼤值与最⼩值,95%的⼈都问过这个问题了前⼏天呢,有好⼏个群⾥的⼩伙伴在问,如果按条件求取最⼤值与最⼩值的问题,这是⼀个实际⼯作中的经常会遇到的⼀个问题。
今天⼩必⽼师教⼤家两个⽅法可以快速地得到最⼤值最⼩值。
如下图所⽰,是⼀份某个单位的季度奖⾦,现在按要求,计算出每个部门的各个季度的最⾼奖⾦与最低奖⾦:对于以上问题,下⾯⼩必⽼师给⼤家介绍两种⽅法,⼀种是透视表法,⼀种是公式函数法、具体的解决⽅法如下:01透视表法透视表是⽇常处理分析数据最常⽤的⼀个⼯具,具体的操作⽅法如下:Step-01:选中数据区域,单击【插⼊】-【数据透视表】-【现有位置】-【确定】,如下图所⽰:Step-02:在弹出的对话框中,将“部门”与“季度”字段拖放⾄【⾏标签】,将“奖⾦”字段分两次拖放⾄【数值】,如下图所⽰:Step-03:设置字段的计算⽅式,将【数值】⾥的第⼀个“奖⾦”的计算⽅式设置为“最⼤值”,“奖⾦2”的计算⽅式设置为“最⼩值”,并修改标题名称,如下图所⽰:Step-04:设置【分类汇总】⽅式为“不分类汇总”,设置【总计】为“对⾏列禁⽤”,选择【报表布局】为“以表格形式”与“重复所有项⽬标签”,如下图所⽰:02公式法在Excel中提供的最值函数常⽤的有MAX与MIN函数,但是不能直接⽤于计算条件最值,必须与其他的函数配合使⽤,⼀般以数组⽅式出现。
⽽在Office 365的Excel版本中则提供了MAXIF与MINIF的函数,可以直接⽤于计算条件最值。
在H2单元格中输⼊公式:{=MAX(IF((F2=A:A)*(G2=B:B),D:D))},按组合键<Ctrl+Shift+Enter>完成后向下填充。
如下图所⽰:在I2单元格中输⼊公式:{=MIN(IF((F2=A:A)*(G2=B:B),D:D))},按组合键<Ctrl+Shift+Enter>完成后向下填充。
如下图所⽰:解释:以上公式属于数组公式,对于初学者来说有⼀定的困难,但是⼩必⽼师给⼤家总结了⼀个万能的套⽤公式,⼤家套⽤这个公式就⾏。
WPS中的数据表字段值最大值在使用WPS表格进行数据处理和分析时,我们常常需要查找和计算字段的最大值。
在WPS表格中,有几种不同的方法可以帮助我们找到数据表中某个字段的最大值。
本文将介绍WPS表格中的数据表字段值最大值的几种方法和技巧。
一、使用MAX函数查找最大值MAX函数是WPS表格中一个非常有用的函数,它可以用来查找一列数据中的最大值。
在数据表中,我们可以通过以下步骤使用MAX函数来查找字段的最大值:1. 首先,确定需要查找最大值的字段所在的列。
例如,我们要查找某个表格中的销售额字段的最大值,该字段位于第二列。
2. 在需要显示最大值的单元格中输入MAX函数,即=MAX(。
3. 选择需要查找最大值的字段所在的列,然后按下Enter键。
WPS 表格会自动计算并显示该字段的最大值。
二、使用条件格式化高亮显示最大值除了使用MAX函数,我们还可以使用条件格式化来将数据表字段的最大值高亮显示,以便更直观地观察和分析数据。
下面是使用条件格式化高亮显示最大值的步骤:1. 选中需要查找最大值的字段所在的列。
2. 在“开始”选项卡中,点击“条件格式”。
3. 在弹出的条件格式对话框中,选择“单元格值”作为条件,然后选择“大于”作为关系。
在“数值”框中输入以下公式:=MAX(字段所在的列)。
4. 在下方的格式设置中选择一种颜色,将最大值所在的单元格高亮显示。
5. 点击“确定”按钮,条件格式化规则即可应用到选中的字段中,最大值会被高亮显示出来。
三、使用排序查找最大值除了以上两种方法,我们还可以通过对数据表进行排序来查找字段的最大值。
排序可以按照升序或降序排列数据表的字段。
1. 选中需要查找最大值的字段所在的列。
2. 在“数据”选项卡中,点击“排序”。
3. 在弹出的排序对话框中,选择需要排序的列,并选择“降序”。
4. 点击“确定”按钮,数据表会按照选定的列进行降序排列。
5. 查看排序后的数据表,最大值将出现在该字段的第一行。
最大子段和的几种实现我们知道最大子段和是指给出一组数字序列,在这个序列中有正有负,而最大的字段和就是指连续的几个数中,把这些数值加起来,求得最大的和,即为最大的子段和!今天,我们讨论的就是如何求得最大的子段和!这个实现,有几种算法,我们一一讲述!我们假设当求得的最大和为负数的时候,规定为0!方法1:,我们讲述最简单的一种实现方式,也是最容易想到的就是用穷举法来实现!这个原理其实是很简单,就是一组一组的试,这样找到最大的值!这是很容易想到的!详见代码!1 #include<cstdio>2 #define maxn 10003 int main()4 {5 printf("the num of zi duan:\n");6 int ziduan_len;7 int a[maxn];8 scanf("%d",&ziduan_len);9 printf("please input the sequence of zi duan is :\n");10 for(int i=0;i<ziduan_len;i++)11 scanf("%d",&a[i]);121314 int i,j,k;15 int maxsum=0;16 int besti,bestj;1718 for(i=0;i<ziduan_len;i++)19 {20 for(j=i;j<ziduan_len;j++)21 {22 int sum=0;23 for(k=i;k<j;k++)24 {25 sum+=a[k];26 if(sum>maxsum)27 {28 maxsum=sum;29 besti=i;30 bestj=k;31 }3233 }34 }35 }36 printf("choose from %d to %d can make the sum of sequence the largest\n",besti,bestj);37 printf("the largest sum is :%d \n",maxsum);38 return 0;39 }这个程序很浅显,就不再多说了!我们可以把以上代码优化一下,上面的代码的时间复杂度为O(n的三次方),稍微优化后,时间复杂度变成了O(n的平方)! 请看优化后的代码!#include<cstdio>#define maxn 1000int main(){printf("the num of zi duan:\n");int ziduan_len;int a[maxn];scanf("%d",&ziduan_len);printf("please input the sequence of zi duan is :\n");for(int i=0;i<ziduan_len;i++)scanf("%d",&a[i]);int i,j,k;int maxsum=0;int besti,bestj;for(i=0;i<ziduan_len;i++){for(j=i;j<ziduan_len;j++){int sum=0;sum+=a[j];if(sum>maxsum){maxsum=sum;besti=i;bestj=k;}}}printf("choose from %d to %d can make the sum of sequence the largest\n",besti,bestj);printf("the largest sum is :%d \n",maxsum);return 0;}就是简单的去掉最后一个循环!方法2 :我们用动态规划的思想来解决这个问题!这个问题从数学的角度上来讲,就是一个这样的问题:就是求max{ a[k]的和} k从i 到j 其中1<=i<=j<=n状态转移方程b[j]=max{b[j-1]+a[j],a[j]}, 1<=j<=n1 #include<cstdio>2 #define maxn 10003 int main()4 {5 printf("the num of zi duan:\n");6 int ziduan_len;7 int a[maxn];8 scanf("%d",&ziduan_len);9 printf("please input the sequence of zi duan is :\n");10 for(int i=0;i<ziduan_len;i++)11 scanf("%d",&a[i]);12 int i;13 int maxsum=0;14 int b=0;1516 for(i=0;i<ziduan_len;i++)17 {1819 int back_sum=b;20 if(b>0)21 {22 b+=a[i];2324 }2526 else27 b=a[i];28 if(b>back_sum)29 maxsum=b;3031 }32 printf("the largest sum is :%d \n",maxsum);33 return 0;34 }方法3:用分治算法来处理这个问题,将进一步降低时间复杂度至o(nlog(n)) 算法思想:将a[1:n]分成两段来求.整个子段的最大和无非有以下几种情况:1.整个子段的最大和,是在a[1:n/2]中求得2.整个子段的和是在a[n/2:n]中求得!3.整个子段的最大和在中间求得,这个求最大和的过程中必定包含a[n/2]。
最⼤字段和(四种⽅法)Description给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的⼦段和的最⼤值。
如果该⼦段的所有元素和是负整数时定义其最⼤⼦段和为0。
Input第⼀⾏有⼀个正整数n(n<1000),后⾯跟n个整数,绝对值都⼩于10000。
直到⽂件结束。
Output输出它的最⼤⼦段和。
Sample Input6 -2 11 -4 13 -5 -2Sample Output201.暴⼒跑表法(时间复杂度(n³))(AC oj:912 ms)跑每⼀个点,⽤⼀个⼆维数组的坐标 i , j表⽰i -----> j 字段内的和。
分别求出后,跑这个⼆维数组,取出最⼤值。
1 #include <iostream>2 #include<string.h>3using namespace std;45int main()6 {7int n1;8int i,j,k,max1,m,n;9int sum=0;10 cin>>n1;11int ap[n1];12int a[n1][n1];1314for(i=0;i<n1;i++)15 cin>>ap[i];16 memset(a,0,sizeof(a)); //数组清零17 a[0][0]=ap[0];18for(i=0;i<n1;i++)19 a[i][i]=ap[i];20for(i=0;i<n1;i++)21for(j=i;j<n1;j++)22 {23if(i!=j)24 {25if(j!=0)26 {27 k=j-1;28 a[i][j]=a[i][k]+ap[j];29 }30 }31 }3233 max1=a[0][0];34for(i=0;i<n1;i++)35for(j=0;j<n1;j++)36 {37if(max1<a[i][j])38 {39 max1=a[i][j];40 m=i;41 n=j;42 }43 }44 cout<<max1;45return0;46 }2.暴⼒记忆法(时间复杂度(n²))(AC oj:12 ms)此⽅法同第⼀种⽅法,是暴⼒法的升级版。
分治法1、二分搜索算法是利用(分治策略)实现的算法。
9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
最大字段和例题
最大字段大小通常是指数据库中一条记录的最大长度。
最大字段大小取决于数据库管理系统 (DBMS) 的规格说明书和所使用的操作系统。
一般来说,现代操作系统和数据库管理系统都能够支持相当大规模的数据记录。
例如,现代关系型数据库管理系统 (如 MySQL、PostgreSQL、Oracle 等) 通常能够支持数百万或数十亿条记录。
以下是一些常见数据库管理系统的最大字段大小:
- MySQL:MySQL 的最大字段大小为 2^32-1 字节,即 4GB。
- PostgreSQL:PostgreSQL 的最大字段大小为 2^32-1 字节,即4GB。
- Oracle:Oracle 的最大字段大小为 2^32 字节,即 4GB。
- MariaDB:MariaDB 是一种 MySQL 的克隆版本,它的最大字段大小与 MySQL 相同,均为 2^32-1 字节,即 4GB。
需要注意的是,最大字段大小并不是固定的,可能会随数据库管理系统的升级而发生变化。
此外,某些数据库管理系统可能支持更大的字段大小,但可能需要使用特殊的许可证或选项。
以下是一个关于最大字段大小的例题:
假设要求创建一个名为“customers”的表格,其中包含“id”、“name”、“age”、“gender”、“address”5 个字段。
要求每个字段的最大长度均为 100 字节,请问可以使用的最大字段长度是多少?
答案:可以使用的最大字段长度为 5 个字段乘以 100 字节,即
500 字节。
分治法1、二分搜索算法是利用(分治策略)实现的算法。
9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
最⼤字段和问题最⼤⼦段和 -- 分治,dp1.问题描述输⼊⼀个整型数组,数组中的⼀个或连续多个整数组成⼀个⼦数组。
求所有⼦数组的和的最⼤值。
⽰例1:输⼊: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续⼦数组 [4,-1,2,1] 的和最⼤,为 6。
2.分析问题2.1 ⽅案1此题很显然可以⽤多层for循环解决, 时间复杂度为O(n^2) .2.2 ⽅案2, 图像压缩问题的变形采⽤dp的思路, 我们把这个数组分成不同的段, **dp[i] 表⽰以nums[i]结尾的那个段的最⼤字段和, 所以就存在nums[i]这个元素是加⼊前⼀段中, 还是⾃成⼀段这就是需要思考的问题, 如果dp[i-1] < 0, 如果nums[i]加⼊前⼀段中, 最⼤字段和为dp[i-1] + nums[i], 这个值必然⼩于nums[i], 因为dp[i-1]是负数, 负数加上⼀个数,必然⽐这个数⼩, 就像是⼀个数减了某个数, 肯定变⼩. 其他情况下只⽤求dp[i-1] + nums[i]和 nums[i] 的最⼤值即可 **通过上⾯的分析, 很容易写出状态转移⽅程// dp初始化dp[0] = nums[0]if(dp[i-1] < 0) dp[i] = nums[i]; // ⾃成⼀段if(dp[i-1] >= 0) dp[i] = Max(dp[i-1] + nums[i], nums[i])简化转移⽅程, dp[i-1]<0时, nums[i] + dp[i-1] 必然是⼩于nums[i]的, 其实也是在求Max(dp[i-1] + nums[i], nums[i]),所以这个题只⽤⼀个⽅程就搞定. 简化了if else的判断, 对程序性能提升也是有帮助的dp[0] = nums[0]dp[i] = Max(dp[i-1] + nums[i], nums[i])这个题很有个很坑的地⽅就是, dp中最后⼀个元素并不是最终要求的结果, 这个我们平时做的题有很⼤的出⼊, dp[i]的含义是以nums[i]结尾的那个段的最⼤字段和, 那么dp中最后⼀个元素表⽰的是以nums中最后⼀个元素结尾的那个段的最⼤字段和, 最⼤的字段和不⼀定以nums中最后⼀个元素结尾,所以要最终要求的⽬标是dp数组中的最⼤值public int maxSubArray(int[] nums) {if(nums == null || nums.length <= 0) throw new IllegalArgumentException();int[] dp = new int[nums.length];dp[0] = nums[0];for(int i = 1; i < nums.length; ++i){dp[i] = Math.max(nums[i], nums[i] + dp[i-1]);}// return dp[nums.length-1]; 神坑int maxValue = Integer.MIN_VALUE;for(int j = 0; j < dp.length; ++j){if(dp[j] > maxValue)maxValue = dp[j];}return maxValue;3. ⽅案3采⽤分治的思路, 我们把数组从中间分开, 最⼤⼦序列的位置就存在以下三种情况最⼤⼦序列在左半边, 采⽤递归解决最⼤⼦序列在右半边, 采⽤递归解决最⼤⼦序列横跨左右半边, 左边的最⼤值加上右边的最⼤值时间复杂度分析T(n) = 2 F(n/2) + n时间复杂度O(nlgn)public int maxSubArray(int[] nums) {if(nums == null || nums.length <= 0) throw new IllegalArgumentException(); return helper(nums, 0, nums.length-1);}private int helper(int [] nums, int start, int end){if(nums == null || nums.length <= 0) throw new IllegalArgumentException(); if(start == end)return nums[start];int middle = start + (end - start) / 2;int leftSums = helper(nums,start, middle);int rightSums = helper(nums,middle+1, end);// 横跨左右两边int leftRightSums;// 左边的最⼤值int lsums = Integer.MIN_VALUE, temp = 0;for(int i = middle; i >= start; i--){temp += nums[i];if(temp > lsums)lsums = temp;}// 右边的最⼤值int rsums = Integer.MIN_VALUE;temp = 0;for(int j = middle+1; j <= end; j++){temp += nums[j];if(temp > rsums) rsums = temp;}leftRightSums = rsums + lsums;return Math.max(Math.max(leftSums, rightSums), leftRightSums);}。
1、算法的五个重要的特征:确定性、能行性、输入、输出、有穷性/有限性。
2、表示算法的语言主要有:自然语言、流程图、盒图、PAD 图、伪代码、计算机程序设计语言3、算法分析有两个阶段:事前分析和时候测试。
4、衡量算法有几个方面:时间和空间。
5、渐进意义下的符号的意义: 记:算法的计算时间为f(n), 数量级限界函数为g(n), 其中,n 是输入或输出规模的某种测度。
f(n)表示算法的实际”执行时间一与机器及语言有关。
g( n)是形式简单的函数,如nm,logn,2n,n!等。
是事前分析中通过对计算时间或频率计数统计分析所得的与机器及语言无关的函数。
以下给出算法执行时间:上界( 0)、下界(Q )、“平均”( )的定义。
定义1.1如果存在两个正常数c和NO,对于所有的N> NO,有|f(N)|w C|g(N)|,则记作:f(N)= O(g(N))。
1) 当说一个算法具有0(g(n))的计算时间时,指的就是如果此算法用n 值不变的同一类数据在某台机器上运行时,所用的时间总是小于g(n)的一个常数倍。
2) g(n)是计算时间f(n)的一个上界函数,f(n)的数量级就是g(n)。
Eg :因为对所有的N > 1有3N < 4N,所以有3N=O(N);因为当N > 1 时有N+1024 < 1025N,所以有N+1024=O(N); 因为当N > 10时有2N2+11N-10W 3N2,所以有2N2+11N-1O=O(N2)因为对所有N A 1有N2< N3,我们有N2=O(N3)作为一个反例N3丰O(N2),因为若不然,则存在正的常数C 和自然数N0,使得当N A N0,有N3W CN2,即N< C。
显然,当取N=max{ N0,C+1}时这个不等式不成立,所以N3丰O(N2)多项式定理:定理1.1 若A(n) = amnm+, +a1n+a0 是一个m 次多项式,则有A(n)= O (nm)即:变量n的固定阶数为m的任一多项式,与此多项式的最高阶nm 同阶。
最大字段和问题
1.实验题目
给定由N 个整数(可能有负整数)组成的序列(1a ,2a ,…,n a ),求该序列形如∑=j i k k a
的子段和的最大值,当所有整数均为负整数是,其最大子段和为0。
2.实验目的
(1)深刻掌握动态规划法的设计思想并能熟练运用;
(2)理解这样一个观点:同样的问题可以用不同的方法解决,一个好的算法是反复努力和重新修正的结果。
3.实验分析
蛮力法:利用3个for 的嵌套(实现从第1个数开始计算子段长度为1,2,3…n 的子
段和,同理计算出第2个数开始的长度为1,2,3…n-1的子段和,依次类推到第n 个数开始计算的长为1的子段和)和一个if (用来比较大小),将其所有子段的和计算出来并将最大子段和赋值给summax1。
用了3个for 嵌套所以时间复杂性为○(n 3)。
分治法:
(1)划分:按照平衡子问题的原则,将序列(1a ,2a ,…,
n a )划分成长度相同的两个字序列(1a ,…,⎣⎦2/n a )和(⎣⎦12/+n a ,…,n a )。
(2)求解子问题:对于划分阶段的情况分别的两段可用递归求解,如果最大子段和在
两端之间需要分别计算
s1=⎣⎦⎣⎦)2/1(max 2/n i a n i k k ≤≤∑=,
s2=⎣⎦⎣⎦)2/(max 12/n j n a j n k k
≤≤∑+=,
则s1+s2为最大子段和。
若然只在左边或右边,那就好办了,前者视s1为summax2,后者视s2 o summax2。
(3)合并:比较在划分阶段的3种情况下的最大子段和,取三者之中的较大者为原问
题的解。
(4)时间复杂性分析: f(n) = 2*f(n/2) + ○(n/2), 最后为○(nlogn)。
动态规划法:
动态规划法求解最大字段和问题的关键是要确定动态规划函数。
记
)1(max )(1n j a j b i i k k j i ≤≤⎭
⎬⎫⎩⎨⎧=∑=≤≤ 则
{})(max max max max 1111j b a a n j j i k k j i n j j
i k k n j i ≤≤=≤≤≤≤=≤≤≤=⎭⎬⎫⎩⎨⎧=∑∑ 由b (j )的定义,当b (j-1)>0是,b (j )=b (j-1)+a ,否则,b (j )=a 。
可得如下递推式:
)1()(0
)1(0)1()1({n j j b j b j b a j b a j j ≤≤=>-≤-+-
代码实现过程中只用了一个for, 时间复杂性为:○(n)
三种方法写在同一cpp 上,比较其时间,由于分治法和动态规划法,要用比较比长的序列,故把程序设计成有手动输入和随机输入,对于随机生成函数rand()只生成正数,故引入了rand()/13-1129,使其既有正数生成,也有负数生成。
程序运行如下:
首先先用手动输入:
由于要比较时间,故要用到大量数据,所以用随机输入:
至于序列在此不作输出,若输出将会造成截屏不方便,
可见蛮力法只可以处理小理的数据。
当数据量超过10000时,由蛮力法要等很久才输出,所先把蛮力去掉,就比较分治法和动态
规划法:
明显可以动态规划法所用的时间要少。