此代码在全为-2时,输出0,显然错误,因为函数下标从0开始,而传递的参数希望他从1开始
#include<stdio.h>
#include<string.h>
int a[101][101],b[10010];
int subsequencesum(int a[],int n)
{
int sum=0,maxsum=0,i;
for(i=0;i<n;i++)
{
sum+=a[i];
if(sum>maxsum)
maxsum=sum;
else
if(sum<0)
sum=0;
}
return maxsum;
}
int main()
{
int i,j,T,p,k;int col,row,m;int max,ans,sum,cnt;
scanf("%d",&T);
while(T--)
{
max=-0x7fffffff,ans=-0x7fffffff;
memset(a,0,sizeof(a));
scanf("%d%d",&row,&col);
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=row;i++)
{
memset(b,0,sizeof(b));
cnt=1;;
for(j=i;j<=row;j++)
{
for(k=i;k<=j;k++)
{
sum=0;
for(m=1;m<=col;m++)
sum+=a[k][m];
b[cnt++]=sum;
}
}
max=subsequencesum(b,cnt-1);
if(ans<max)
ans=max;
}
printf("%d\n",ans);
}
return 0;
}
//改过后,超时,确实麻烦啦
#include<stdio.h>
#include<string.h>
int a[101][101],b[10010];
int subsequencesum(int a[],int n)
{
int sum=0,maxsum=-0x7fffffff,i;
for(i=0;i<n;i++)
{
sum+=a[i+1];
if(sum>maxsum)
maxsum=sum;
else
if(sum<0)
sum=0;
}
return maxsum;
}
int main()
{
int i,j,T,p,k;int col,row,m;int max,ans,sum,cnt;
scanf("%d",&T);
while(T--)
{
max=-0x7fffffff,ans=-0x7fffffff;
memset(a,0,sizeof(a));
scanf("%d%d",&row,&col);
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=row;i++)
{
cnt=1;
for(j=i;j<=row;j++)
{
//memset(b,0,sizeof(b));
for(k=i;k<=j;k++)
{
sum=0;
for(m=1;m<=col;m++)
sum+=a[k][m];
// printf("%d\n",sum);
b[cnt++]=sum;
}
max=subsequencesum(b,cnt-1);
//printf("%d %d %d\n",sum,max,ans);
if(ans<max)
ans=max;
}
}
printf("%d\n",ans);
}
return 0;
}
//改成函数调用也超时
//改过后,超时,确实麻烦啦
#include<stdio.h>
#include<string.h>
int a[101][101],b[10010];
int cnt,col,row;
int subsequencesum(int a[],int n)
{
int sum=0,maxsum=-0x7fffffff,i;
for(i=0;i<n;i++)
{
sum+=a[i+1];
if(sum>maxsum)
maxsum=sum;
else
if(sum<0)
sum=0;
}
return maxsum;
}
void total(int i,int j)
{
int sum,k,m;
for(k=i;k<=j;k++)
{
sum=0;
for(m=1;m<=col;m++)
sum+=a[k][m];
b[cnt++]=sum;
}
}
int main()
{
int i,j,T,p,k;int m;int max,ans,sum;
scanf("%d",&T);
while(T--)
{
max=-0x7fffffff,ans=-0x7fffffff;
memset(a,0,sizeof(a));
scanf("%d%d",&row,&col);
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=row;i++)
{
cnt=1;
for(j=i;j<=row;j++)
{
//memset(b,0,sizeof(b));
total(i,j);
max=subsequencesum(b,cnt-1);
//printf("%d %d %d\n",sum,max,ans);
if(ans<max)
ans=max;
}
}
printf("%d\n",ans);
}
return 0;
}
//AC
#include<stdio.h>
#include<string.h>
int a[101][101],b[101];
int subsequencesum(int a[],int n)
{
int sum=0,maxsum=-0x7fffffff,i;
for(i=1;i<=n;i++)
if(maxsum<a[i])
maxsum=a[i];
if(maxsum<=0)
return maxsum;
for(i=0;i<n;i++)
{
sum+=a[i+1];
if(sum>maxsum)
maxsum=sum;
else
if(sum<0)
sum=0;
}
return maxsum;
}
int main()
{
int col,row,max,ans,temp;int i,j,k,T,m;
scanf("%d",&T);
while(T--)
{
temp=ans=max=-0x7fffffff;
scanf("%d%d",&row,&col);
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=row;i++)
{
memset(b,0,sizeof(b));
for(j=i;j<=row;j++)
{
for(k=1;k<=col;k++)
{
b[k]+=a[j][k];
}
ans=subsequencesum(b,col);
if(temp<ans)
temp=ans;
}
}
printf("%d\n",temp);
}
return 0;
}