vs作为现在流行的主流编程软件,我接下来将会以vs2015为例,介绍vs2015的安装方法。
1.从Microsoft官网上或从网上下载vs2015安装镜像。
2.运行下载文件后,根据提示完成安装。
但是需要注意,出现线面弹框的时候,要选择自己需要的语言,不要选择自己不需要的语言,因为那样会让安装时间过长。
3.接下来我将演示如何创建一个cpp文件。
选择新建项目,选择Win32控制台应用程序。
在这里选择源文件,右击创建新项目。
选择c++文件。
然后大家就可以在这里编程了。
--------------------------------------------------------------------------这里是可爱的分界线-----------------------------------------------------------------------------------------
接下来我将为大家介绍求数组的子数组之和的最大值算法。
看到这个题目我感到很亲切,因为我本身是做acm的,所以对这个题很熟悉。
开始我和大家一样,或许第一印象就是使用暴力求解的方法,(- -当然你们也可能比我聪明直接想出了更简便的算法)。
这里我要向大家介绍一个源自邹欣老师编写的的《编程之美》中的一个算法,当然我只是在时间上进行了相对的节约,并没有对空间上进行节约,如果愿意,这也是完全可以的。
如果同学们才用暴力求解,会发现将程序的时间复杂度将是O(n*n),这在n很小是还可以,可是当n大到一定程度是,这个复杂度是相当恐怖的。
好了不bb了,我将介绍一下这个的算法,除了需要储存数据的a数组,我将而外开取两个数组,一个是now数组,一个是all数组。now[i]数组用来储存到第i个数时,一定加上a[i]的最大值,而all[i]数组则表示到第i个数时的最大值。
这里根据动态规划,不难得出下面两个递推公式。
now[i]=max(a[i],now[i-1]+a[i]);
all[i]=max(now[i],all[i-1]);
我采取了《编程之美》上那种从数组后面向前递推的方法,当然正面递推也是正确的。
这是我代码地址:https://git.coding.net/Sm1leJokinger/shuzu.git
下面我将贴上我单元测试的结果。
用例编号 |
用例描述 |
输入数据 |
预期输出数据 |
实际输出数据 |
通过/不通过 |
评价
|
1 |
最大子数和为部分数组 |
0,1,2-5,4,5 |
9 |
9 |
通过 |
结果正确 |
2 |
最大子数和为整个数组 |
0,1,2,-1,10,5 |
17 |
17 |
通过 |
结果正确 |
3 |
全部为0 |
0,0,0,0,0,0 |
0 |
0 |
通过 |
结果正确 |
4 |
最大子数和为最小负数 |
-1,-1,-2,-5,-4,-5 |
-1 |
-1 |
通过 |
结果正确 |
5 |
包含0的正数 |
0,1,2,3,4,5 |
15 |
15 |
通过 |
结果正确 |