DP———1001

来源:互联网 发布:福建网络干部培训 编辑:程序博客网 时间:2024/06/03 22:59

题目:最大和

题意:给出数字T,T代表测试的数据组,然后给出n,n代表每组数据个数,求出每组数据的最大和的子序列,输出最大和还有子序列的起始和结束位置。

思路:问题是求出每组数据的最大和的子序列,需要注意的是子序列 起始结束位置的变化 。

代码:#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int T,n,i,p,t;
int first,end,max,sum;
int a[10001];
p=1;
scanf("%d",&T);
while(T--)
{
       scanf("%d",&n);  
  for(i=0;i<n;i++)  
  scanf("%d",&a[i]);
  first=end=t=1;
  max=-1000;
  sum=0;
  for(i=0;i<n;i++)
  {
  sum=sum+a[i];
  if(sum>max)
  {
  max=sum;
  first=t;
  end=i+1;
  }
  if(sum<0)
  {
  sum=0;
  t=i+2;
  }
  }
  cout<<"Case "<<p++<<":"<<endl;
       cout<<max<<" "<<first<<" "<<end<<endl;
  if(T) printf("\n"); 
}
    return 0;
}

0 0