最大子串
2017-08-01 12:54
169 查看
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)
输出
对于每组测试数据输出和最大的连续子串的和。
样例输入
样例输出
对于本题若用f(i,j)表示i到j的最大子串需要枚举i和j,而本题数据较多不宜采用。而对于一个字串的连续子串分析不难有以下情况当字串的所有元素都为小于0时其最大子串一定是所有数中最大的一个数,而如果存在大于等于0的数其最大子串一定在正数与0的位置,而若字串被中间一段为负数子串分为两段时如果前一段正数字串和小于中间一段负数和则最大子串一定在两个正数串中否则为三段字串和。即若用sum表示前i个数的和,maxnum表示最大子串和时有:
当sum<0第i+1个数大于等于0时sum应重置为0即:sum=0;[b]sum+=num;maxnum=max{maxnum,sum}[/b]
当sum<0第i+1个数小于0时maxnum=max{maxnum,num}
不属于前两种的应做第三种决策:sum+=num;maxnum=max{maxnum,sum}
#include<stdio.h>
#define INF 1000000
int max(int a,int b);
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int n;
int maxnum,sum;
maxnum=sum=-INF;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int num;
scanf("%d",&num);
if(sum<0&&num>=0)
{
sum=0;
sum+=num;
maxnum=max(maxnum,sum);
}else if(sum<0&&num<0)
{
maxnum=max(maxnum,num);
}else
{
sum+=num;
maxnum=max(maxnum,sum);
}
}
printf("%d\n",maxnum);
}
return 0;
}
int max(int a,int b)
{
return a>b?a:b;
}
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)
输出
对于每组测试数据输出和最大的连续子串的和。
样例输入
1 5 1 2 -1 3 -2
样例输出
5
对于本题若用f(i,j)表示i到j的最大子串需要枚举i和j,而本题数据较多不宜采用。而对于一个字串的连续子串分析不难有以下情况当字串的所有元素都为小于0时其最大子串一定是所有数中最大的一个数,而如果存在大于等于0的数其最大子串一定在正数与0的位置,而若字串被中间一段为负数子串分为两段时如果前一段正数字串和小于中间一段负数和则最大子串一定在两个正数串中否则为三段字串和。即若用sum表示前i个数的和,maxnum表示最大子串和时有:
当sum<0第i+1个数大于等于0时sum应重置为0即:sum=0;[b]sum+=num;maxnum=max{maxnum,sum}[/b]
当sum<0第i+1个数小于0时maxnum=max{maxnum,num}
不属于前两种的应做第三种决策:sum+=num;maxnum=max{maxnum,sum}
#include<stdio.h>
#define INF 1000000
int max(int a,int b);
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int n;
int maxnum,sum;
maxnum=sum=-INF;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int num;
scanf("%d",&num);
if(sum<0&&num>=0)
{
sum=0;
sum+=num;
maxnum=max(maxnum,sum);
}else if(sum<0&&num<0)
{
maxnum=max(maxnum,num);
}else
{
sum+=num;
maxnum=max(maxnum,sum);
}
}
printf("%d\n",maxnum);
}
return 0;
}
int max(int a,int b)
{
return a>b?a:b;
}
相关文章推荐
- 动态规划——最大子串和
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 求一个字符串的最长不重复子串的最大长度
- POJ-2406 Power Strings(KMP求重复子串出现的最大次数)
- 菜鸟上路,杭电OJ1003 最大子串问题
- 最大子序列和、最长递增子序列、最长公共子串、最长公共子序列
- Maximum Subarray 最大子串和问题(需要重看理论)
- 【LeetCode51-60】N皇后,和最大子串,螺旋矩阵,跳跳棋,合并区间,第K个全排列
- 求连续子串的和的最大值
- 2230: 最大连续子串和
- 最大回文子串
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- nyistoj44--最大连续子串和
- LCS_最大公共子串查找算法解析
- GDKOI2003 最大公共子串
- 序列元素和是k的倍数的最大子串长度
- 元素和是K的倍数的子串的最大长度
- c语言输出字符串中最大对称子串长度的3种解决方案
- 输入一个字符串,要求找出字符串中最大子串的长度
- 53.Maximum Subarray(最大子串和)