1760: 最大数字子串
Time Limit: 1500 ms Memory Limit: 10000 kB
Judge type: Multi-cases
Total Submit : 177 (35 users) Accepted Submit : 53 (31 users) Page View : 651
输入n(1<=n<=1e6)和n个整数,这n个整数的绝对值均小于1000,求最大数字子串之和。
在第二组中,最大的数字子串是2 6 -3 5 -7 14的和
Input
输入为多组样例数据,每组第一行为一个正整数n,第二行为n个整数组成的数字串。Output
对于每组样例,输出仅为一行,表示最大数字子串的各项之和。Sample Input
9 -3 4 9 2 -10 -7 11 3 -8 13 -1 2 6 -3 5 -7 14 -5 -15 1 8 -4 9
Sample Output
15 17
Hint
在第一组中,最大的数字子串是4 9 2的和在第二组中,最大的数字子串是2 6 -3 5 -7 14的和
Source
/**/
/*
一维DP,思路来源:因为是求数字子串的最大和,显然:我们可以在求解的过程中保留最大值!!!
但不可能得达到比原来更大的时候就要更新位置....
*/

#include
<
stdio.h
>

int
main(
void
)
...
{
long max = -1000000,sum =0 ;
long n,i;
int data;
while((scanf("%ld",&n))!= EOF) 
...{
max = -1000000;
sum =0 ;
for(i=1 ; i<= n ; i++)
...{
scanf("%d",&data);
if(sum >= 0)
sum += data ;
else
sum = data ;
if(sum > max)
max = sum ;
}
printf("%ld ",max);
}
return 0 ;
}
本文介绍了一种使用一维动态规划方法解决最大数字子串求和问题的算法实现。该算法通过遍历整数序列并维护当前子串和及最大子串和,最终找出整数序列中的最大数字子串之和。
573

被折叠的 条评论
为什么被折叠?



