HDU Max Sum

来源:互联网 发布:女士内裤知乎 编辑:程序博客网 时间:2024/05/29 11:48

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1003


动态规划入门  dp[i]=max(0,dp[i-1]);

本题还应该注意:

最大字段和的起止位置,

有很多案例,以第一个为准。


切记:核心代码部分,万万不要把if(sum>max) 和if(sum<0)

调换位置,至于为什么,仔细想想。


用测试数据说明问题:

input

1

 4 2 3 -5 6

 

output

Case 1:6 1 4


#include<iostream>  using namespace std;  #define Min -999999  int main()  {      int data[100000];    int  start,end;      int step=1;    int m;        cin>>m;        while(m--)      {          int n;          cin>>n;          for (int i=1; i<=n;i++)                    cin>>data[i];          int max = Min;          int k=1;          int sum = 0;                for (i=1; i<=n; i++)          {              sum = sum + data[i];              if (sum > max)              {                  max = sum;                  start=k;                  end=i;              }              if(sum<0)              {                  sum=0;                  k=i+1;              }          }            cout<<"Case "<<step<<":"<<endl;          cout<<max<<" "<<start<<" "<<end<<endl;          step++;          if(m)            cout<<endl;    }      return 0;  }  


0 0
原创粉丝点击