HDOJ 1003
来源:互联网 发布:八叉树算法 编辑:程序博客网 时间:2024/05/29 13:12
题目:求一串数字的和的最大值,并写出这个最大值的开始位置与结束位置。
题解:思路一、将所有数字录入后用穷举法求出所有字符串的值一一对比。但是该方法超时。
思路二、每一个数依次对比,在计算本数前先判断之前的数列最大值是否大于零,
大于零的话加上当前数后与最大值比较看新的数列和是否为最大值,
小于零的话则从当前数开始求新的数列和!并且与之前的最大值比较后选择数列的开始位置及最值。
代码:
#include<stdio.h>int a[100010];int main(){ int t,n,r,s,i,max,st,en,m; while(scanf("%d",&t)!=EOF) { for(r=1;r<=t;r++) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); s=max=-99999; //s表示当前的和max表示最大值先都初始化。 m=st=en=1; //st为开始位置,en为结束位置,m为可能成为的开始位置。 for(i=1;i<=n;i++) { if(s<0) //加当前数之前的数列和小于零的话,和"S"直接为当前数,可能的开始位置为当前位置。 { s=a[i]; m=i; } else //加当前数之前的数列和大于等于零的话,和"s"为"s"+当前数, { s+=a[i]; } if(s>=max) //当前数列和“s”大于最大值时,改变最大值,将目前位置定义为最终位置,开始位置为m { max=s; en=i; st=m; } } printf("Case %d:\n%d %d %d\n",r,max,st,en); if(r!=t) printf("\n"); } } return 0;}
- hdoj 1003
- HDOJ 1003
- HDOJ 1003
- HDOJ 1003
- hdoj 1003
- HDOJ--1003
- HDOJ 1003 Max Sum
- HDOJ 1003 - Max Num
- HDOJ 1003 Max Sum
- hdoj 1003 Max Sum
- HDOJ 1003 Max Sum
- hdoj 1003Max Sum
- HDOJ——1003
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- HDOJ--1003Max Sum
- hdoj 1003 Max Sum
- HDOJ 1003 Max Sum
- Linux下的文件被删除后恢复
- 在Ubuntu上下载、编译和安装Android最新源代码
- ASP.NET自己写的验证码控件(源代码)
- xcode 僵尸模式调试利器
- Oracle 10g 环境下安装 Pentaho
- HDOJ 1003
- 第六章 06_String_6
- 【转】JQuery实现页面随滚动条滚动而动态加载内容的效果
- Unity网络通信(三)同步物体
- ASP.NET程序中常用的三十三种代码(没看)
- Eclipse开发Android的快捷键:
- oracle 全文检索
- C++ 何时使用引用参数(一些指导原则)
- 利用GBK双字节编码突破PHP单引号转义限制进行SQL注入:set names gbk导致的sql注入