zoj1074

经典DP

#include
#include
#include
#include
int DP(int a[], int n)
{
  int i, f[101];
  int max = -200000000;
  for(i=2,f[1]=a[1]; i<=n; i++)
  {
    if(f[i-1]>0)
      f[i] = f[i-1] + a[i];
    else
      f[i] = a[i];
    if(f[i]>max)
      max = f[i];
  }
  return max;
}
int main()
{
  int n, i, he, j;
  int a[105][105], k;
  int sum[105], max;
  scanf("%d",&n);
  for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
      scanf("%d",&a[i][j]);
  max = -200000000;
  for(i=1; i<=n; i++)
  {
    memset(sum, 0, sizeof(sum));
    for(j=i; j<=n; j++)
    {
      for(k=1; k<=n; k++)
        sum[k]+=a[j][k];
      he = DP(sum, n);
      if(he>max) max=he;
    }
  }
  printf("%d\n",max);
  return 0;
}


你可能感兴趣的:(zoj)