NYOJ 子串和
来源:互联网 发布:淘宝卖话费怎么没利润 编辑:程序博客网 时间:2024/06/04 19:28
时间限制:5000 ms | 内存限制:65535 KB
难度:3
- 描述
- 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n。
- 输入
- 第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000) - 输出
- 对于每组测试数据输出和最大的连续子串的和。
- 样例输入
151 2 -1 3 -2
- 样例输出
5
- 提示
输入数据很多,推荐使用scanf进行输入
/*这个题解法有很多,最快的一种就是把数列分成若干个小段,每个小段有一个起始点,设置一个变量sum记录从起始点到当前的总和,
一个max记录整个过程所有小段的最大sum值,从数列第一个位置开始循环,sum累加数列的和,如果sum小于等于0,
那么说明从前一个起始点到当前位置已经独立为一小段,
不会对其他段的sum增加不会起任何正面作用,那么从当前位置sum清零,把当前位置变为一个新的起始点重新开始计数;如果当前sum > max,
说明出现了从起始点到当前位置总和出现了新的最大值,那么max = sum;当循环完所有的数,max里面存的就是我们想要的答案,
这里有一个陷阱就是如果所有数都小于0,那么上面的办法就会得出一个结果0,这肯定是错误的,
整个过程中还要加一段判断如果输入的数是负数,那么就要拿来和max比较一下,如果比max大,那么就max = 这个负数,
这样下来如果全是负数,那么就会留下一个最大的负数,而不是0*/
#include<stdio.h> int main() { int sum , max , num , i , j , k; scanf("%d" , &i); while(i--) { scanf("%d" , &j); for(k = 0 , sum = 0 , max = -400000000 ; k < j ; k++) { scanf("%d" , &num); //正数和负数分开相加,如果说是正数,直接加到sum 要是负数,先判断与max的关系 要是比max的大的话 直接把num赋值给max 否则继续累加 //要是max是负数,就把此时sum置0 这就是上面所说的独立成为一段 if(num > 0) { sum += num; if(sum > max) max = sum; } else { if(num > max) { max = num; continue; } else sum+= num; if(sum < 0) sum = 0; } } printf("%d\n" , max); } return 0; }
附录:
这个程序今天我也写了一遍,但是呢,并没有达到我想要的效果,原因在于我没有正确的把握负数的情况,我的思路很简单,就是另外开辟一个数组,这个数组的相应的位置上存放的是原来数列前n项的和,然后对其进行快排,输出最大的。
例如:-4, -3, -2,-1 正确的答案是输出-1,但是 我的答案就是输出的-4,原因很简单 ,在我的程序中-1就不会单独的出现,所以错误。
上面的程序是我在网上找别人的,感觉写的很好,注释很清楚
0 0
- NYOJ 子串和
- nyoj子串和
- NYOJ子串和
- NYOJ 子串和
- NYOJ 子串和
- nyoj 44 子串和
- NYOJ - 子串和(DP)
- NYOJ-子串和44
- NYOJ 44 子串和
- nyoj-44-子串和
- NYOJ 44 子串和
- NYOJ 44 子串和
- NYOJ 44 子串和
- NYOJ 44 子串和
- NYOJ 44 子串和
- nyoj 44 子串和
- nyoj 44 子串和
- NYOJ--44子串和
- implements Comparable 时 Override compareTo() 的augment问题
- 【Android】34、基本布局——LinearLayout
- HDU-4919-数学推导加Java大数
- JFormJS说明文档
- Fedora failed to start from copied Virtualbox image - Fstab problem
- NYOJ 子串和
- cur常用命令的介绍l
- 静态缓存
- 宿主机和虚拟机网路通信
- Debian最小安装+gnome+fcitx输入法调不出来的问题
- cocos2dx-3.x萝莉快跑学习(一)
- ubuntu root 账户登录
- html5+css 一列布局
- Python的优缺点