1 5 6 4 5 6 5 4 4 11 1 20 6 10
2 2 0 2 1 0
思路:由题目可以知道,这题是一题要我们优化处理的题目,怎么优化处理呢:就是将数据转变成方便计算的形式。在这题里我们要求的是有多少个子序列总和等于特定数M,如果每次都用for来加未免太麻烦了,要是可以很快就得出答案就好了。于是我们将sum作为一个数组用来存储我们输入数每一项a(因为已经有一个存储数组sum存在,所以a[]的存在是多余的,可以直接替换常数)的前n项和,如sum[1]=a,sum[2]=sum[1]+a,这个样子,我们就可以简单的用枚举求每一个区间的大小了;
这里呈上代码
for(i=1; i<=n; i++) { scanf("%lld", &a); s[i]=s[i-1]+a; }
之后再暴力的遍历就可以了;
原文:http://www.cnblogs.com/DCD112358/p/6341361.html