poj1050

来源:互联网 发布:朝鲜人对中国人 知乎 编辑:程序博客网 时间:2024/09/21 09:04

最大字段和的扩展。程序中遍历每两行,用sum数组记录每一列的和,这相当于把二维数组压缩为一维数组,然后计算sum的最大字段和。

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>int sum[120];int DP(int n[],int m){  int i,f[120];  int max=-200000000;  for(i=2,f[1]=n[1];i<=m;i++)  {    if(f[i-1]>0)    {      f[i]=f[i-1]+n[i];    }    else    {      f[i]=n[i];    }    if(f[i]>max) max=f[i];  }  return max;}int main(){  int i,j,k,w;  int n;  int num[120][120];  int max=-2000000;  int x;    scanf("%d",&n);  for(i=1;i<=n;i++)  {    for(j=1;j<=n;j++)    {      scanf("%d",&num[i][j]);                     }  }    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]=sum[k]+num[j][k];       }       x=DP(sum,n);       if(x>max)         max=x;     }                   }  printf("%d\n",max);  return 0;}


0 0
原创粉丝点击