HDU 1003 Max Sum
来源:互联网 发布:mac设置iphone铃声2017 编辑:程序博客网 时间:2024/05/01 06:25
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
题目大意:给出一段整型序列,求出序列中和最大的连续子序列,输出连续子序列的和,以及起始位置和末位置。
例如:给出 6 -1 5 4 -7
sum最大的序列为 6 -1 5 4 则输出14,起始位置1和末位置3
思路分析:
下面为别人题解,稍作改动。
以下是变量说明:t 测试数据组数n 每组数据的长度temp 当前取的数据x 最后MAX SUM的起始位置y 最后MAX SUM的结束位置max当前得到的MAX SUMnow在读入数据时,能够达到的最大和flag记录最大和的起始位置,因为不知道跟之前的max值的大小比,所以先存起来下面模拟过程:1.首先,读取第一个数据,令now和max等于第一个数据,初始化pos1,pos2,x位置2.然后,读入第二个数据,判断①. 若是now+temp<temp,表示当前读入的数据比之前存储的加上当前的还大,说明可以在当前另外开始记录,更新now=temp②. 反之,则表示之前的数据和在增大,更新now=now+temp3.之后,把now跟max做比较,更新或者不更新max的值,记录起始、末了位置4.循环2~3步骤,直至读取数据完毕。
#include <stdio.h>int main(){ int t,n,i,j,tmp; scanf("%d",&t); for(i=1;i<=t;++i) { scanf("%d",&n); int x,y,now,max,flag; scanf("%d",&tmp); now=max=tmp;//将now max 的值初始化为第一个值 x=y=flag=1; for(j=2;j<=n;++j) { scanf("%d",&tmp); if(tmp+now<tmp)//如果now+tmp小于tmp,说明now的值是小于0的,则把now的值赋值为tmp,并记录当前位置为当前序列的起始位置 { now=tmp; flag=j; } else { now+=tmp;//当now不小于0,则把tmp的值加入 } if(max<now)//这个地方是个重点,如果max<now,就会记录在当前末位置的情况下,起始位置后的序列总和为最大的。如果不能满足,则,x,y 的值也不会改变 { max=now; x=flag; y=j; } } printf("Case %d:\n",i); printf("%d %d %d\n",max,x,y); if(i!=t) printf("\n"); }}
0 0
- HDU 1003 Max Sum
- hdu 1003 Max Sum
- hdu 1003 Max Sum
- HDU-1003 max sum
- HDU 1003 - Max Sum
- HDU 1003 Max Sum
- hdu 1003 Max Sum
- HDU 1003 Max Sum
- HDU 1003 Max Sum
- hdu 1003 max sum
- HDU 1003 Max Sum
- hdu 1003 Max Sum
- HDU 1003 Max Sum
- hdu 1003 Max Sum
- HDU 1003 Max Sum
- Hdu 1003 - Max Sum
- HDU-1003-Max Sum
- hdu - 1003 - Max Sum
- install shield 问题Error 7 -1007
- Mysql group by 中行转列
- PCM 数据 音量改变
- SQL server 2005 windows身份验证登陆失败 错误代码18456
- 关闭WebLaf图形控件的反锯齿功能
- HDU 1003 Max Sum
- 东北大学自动化系灵魂人物
- Andriod之使用极光推送自定义消息打造个性的消息推送效果
- UIVisualEffectView用法 毛玻璃效果
- QT如何支持中文
- getopt函数解析
- socket在ios中的应用
- 5.数据结构之通用动态数组
- 【CSS】IE6中的position:fixed问题与随滚动条滚动的效果