HDU 1003Max Sum

来源:互联网 发布:java 线程池初始化 编辑:程序博客网 时间:2024/05/23 19:15

没什么好说的,经典的dp问题,需要考虑一种全为负数的特殊情况,我就被这个坑死了。。。。。。。。。。。

#include<iostream>          #define N 100005      int ar[N];      int dp[N];      int start[N];      int t,n;      int st,ed;            int DP()      {          dp[0]=0;  dp[1]=ar[1];        start[0]=0;  start[1]=ar[1];        st=ed=1;          int sttmp=1,edtmp=1;          for(int i=2;i!=n+1;i++){                            if(ar[i]>ar[i]+start[i-1]){                  start[i]=ar[i];                  sttmp=i;                  edtmp=i;              }else{                  start[i]=ar[i]+start[i-1];                  edtmp=i;              }              if(start[i]>dp[i-1]){                  dp[i]=start[i];                  st=sttmp;                  ed=edtmp;              }else{                  dp[i]=dp[i-1];              }                    }          return dp[n];      }            int main()      {          while(std::cin>>t){              for(int i=0;i!=t;i++){                  std::cin>>n;                  for(int i=0;i!=n;i++){                      std::cin>>ar[i+1];                  }                  int res=DP();                  std::cout<<"Case "<<i+1<<":"<<std::endl;                  std::cout<<res<<" "<<st<<" "<<ed<<std::endl;                  if(i!=t-1){                      std::cout<<std::endl;                  }                        memset(ar,0,sizeof(ar));                  memset(dp,0,sizeof(dp));                  memset(start,0,sizeof(start));              }          }                      }