hdu 1024 Max Sum Plus Plus//DP

来源:互联网 发布:linux 压缩包 编辑:程序博客网 时间:2024/05/20 04:31
#include
#include
#define  N 1000010
#define inf 9999999
int dp[N], pre[N], num[N], max;
int Max(int a, int b)
{   
 return a > b ? a : b;
}
int main()
{   
 int i, j;  
 int n, m; 
 while(scanf("%d%d", &m, &n)!=EOF) 
 {      
  for(i=1;i<=n;i++)  
  {         
   scanf("%d", num+i);  
  }     
  memset(dp, 0, sizeof(dp));  
  memset(pre, 0, sizeof(pre));     
  for(i=1;i<=m;i++)     
  {     
   max = -inf;     
   for(j=i;j<=n;j++)     
   {            
    dp[j] =Max(dp[j-1]+num[j], pre[j-1]+num[j]);  
    pre[j-1] = max;           
    if(max < dp[j])         
    {            
     max =dp[j];     
    }       
   }       
  }     
  printf("%d\n",max); 
 }   
 return 0;