#include<stdio.h>
int D[130][130],a[130][130],ans;
int main()
{
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&D[i][j]);
int max=-99999999; //这里注意一下
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=D[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
//a[i][j]为坐标原点(1,1)和(i,j)围成的面积
int p,q;
for(i=1;i<=n;i++) //自己想象一下(i,j),(p,q)分别为一个矩形的左上角和右下角坐标
for(j=1;j<=n;j++)
for(p=i;p<=n;p++)
for(q=j;q<=n;q++)
{
ans=a[p][q]-a[i-1][q]-a[p][j-1]+a[i-1][j-1]; //自己画一下,想象想象
if(ans>max)
max=ans;
}
printf("%d",max);
}
洛谷P1719最大加权矩形(c语言)(前缀和与差分)
最新推荐文章于 2024-09-27 20:03:04 发布