题目大意:
求出最大连续子序列的和,并且给出起始位置和终止位置
思路:感觉这个题利用动态规划的思路确实是可以节省运算时间,,就是代码多了好多,大概明白以时间换空间什么意思啦~
AC代码:
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- int main()
- {
- int j,i,k,n,m,t;
- int a[100002];
- scanf("%d",&t);
- for (j=1;j<=t;j++)
- {
- scanf("%d",&n);
- for (i=0;i<n;i++)
- {
- scanf("%d",&a[i]);
- }
- int sum=0,maxsum=-1001,first =0, last = 0, temp = 1;
- for (i=0;i<n;i++)
- {
- sum += a[i];
- if (sum > maxsum)
- {
- maxsum = sum;first = temp;last = i+1;
- }
- if (sum < 0)
- {
- sum = 0;temp = i+2;
- }
- }
- printf("Case %d:\n%d %d %d\n",j,maxsum,first,last);
- if (j!=t)
- {
- printf("\n");
- }
- }
- return 0;
- }