POJ - 1050 To the Max(前缀和,暴力枚举)

POJ - 1050 To the Max

#include<iostream>
#include<cstring>
using namespace std;
const int N=110;
int n,a[N][N],s[N][N];
int main()
{
    
    
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1];
    
    memset(s,-0x3f,sizeof s);
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=i;k++)
                for(int l=1;l<=j;l++)
                    s[i][j]=max(s[i][j],a[i][j]-a[i-k][j]-a[i][j-l]+a[i-k][j-l]);
                    
    int ans=-0x3f3f3f3f;
    for(int x1=1;x1<=n;x1++)
        for(int y1=1;y1<=n;y1++)
                ans=max(ans,s[x1][y1]);
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_52792570/article/details/121078199
今日推荐