为什么全wa了,各位大神帮忙看看

P1719 最大加权矩形

XOQR @ 2021-11-11 23:07:10

#include<cstdio>
#include<iostream>
#define For(a,b,c,d) for(int d=a;d<=b;d+=c)
using namespace std;
int n,s=-0e7,a[2002][2002],f[2002],b[2002];
int main() {
    cin>>n;
    For(1,n,1,i) {
        For(1,n,1,j) {
            scanf("%d",a+i+j);
        }
    }
    For(1,n,1,i) {
        For(i,n,1,j) {
            For(1,n,1,k) {
                b[k]+=a[j][k];
            }
            For(1,n,1,k) {
                f[k]=max(f[i-1]+b[k],b[k]);
                s=max(s,f[k]);
            }           
        }
        For(1,n,1,k) {
            f[k]=0;
        }
    }
    printf("%d",s);
    return 0;
}

by Dreamer_002 @ 2022-07-22 11:43:33

其实不必要那么多for,也不必要f和b,只要向这样:

#include<cstdio>
const int N = 125;
const int INF = 1000000000;

int a[N][N];
int maxx=-INF;
int ans;
int n;

int main()
{
    scanf("%d",&n);

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);

            a[i][j]+=a[i][j-1];
        }
    }

    for(int i=0;i<=n-1;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            ans=0;

            for(int k=1;k<=n;k++)
            {
                ans += a[k][j] - a[k][i];

                maxx = maxx > ans ? maxx : ans;

                ans = ans > 0 ? ans : 0;
            }
        }
    }

    printf("%d\n",maxx);

    return 0;
}

马上就AC了。


|