大佬帮我看看哪里错(二维前缀和)

P1736 创意吃鱼法

地表最强男人 @ 2019-04-09 12:03:10

include<iostream>

include<cstring>

include<cstdio>

include<algorithm>

using namespace std; int n,m,s[2600][2600],a[2600][2600],f[2600][2600],g[2600][2600];//s为前缀和 int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { f[i][j]=max(f[i][j],f[i-1][j]); f[i][j]=max(f[i][j-1],f[i][j]); if(a[i][j]==1) { f[i][j]=max(f[i][j],1); if(a[i-1][j-1]==1&&f[i-1][j-1]+1==s[i][j]-s[i-f[i-1][j-1]-1][j]-s[i][j-f[i-1][j-1]-1]+s[i-f[i-1][j-1]-1][j-f[i-1][j-1]-1]) f[i][j]=max(f[i][j],f[i-1][j-1]+1); } } } for(int i=1;i<=n;i++) { for(int j=m;j>=1;j--) { g[i][j]=max(g[i][j],g[i-1][j]); g[i][j]=max(g[i][j+1],g[i][j]); if(a[i][j]==1) { g[i][j]=max(g[i][j],1); if(a[i-1][j+1]==1&&g[i-1][j+1]+1==s[i][j+g[i-1][j+1]]-s[i-g[i-1][j+1]-1][j+g[i-1][j+1]]-s[i][j-1]+s[i-g[i-1][j+1]-1][j-1]) g[i][j]=max(g[i][j],g[i-1][j+1]+1); } } } cout<<max(f[n][m],g[n][1]); return 0; }


by 地表最强男人 @ 2019-04-09 12:03:28

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,s[2600][2600],a[2600][2600],f[2600][2600],g[2600][2600];//s为前缀和 
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            f[i][j]=max(f[i][j],f[i-1][j]);
            f[i][j]=max(f[i][j-1],f[i][j]);
            if(a[i][j]==1)
            {
                f[i][j]=max(f[i][j],1);
                if(a[i-1][j-1]==1&&f[i-1][j-1]+1==s[i][j]-s[i-f[i-1][j-1]-1][j]-s[i][j-f[i-1][j-1]-1]+s[i-f[i-1][j-1]-1][j-f[i-1][j-1]-1])
                    f[i][j]=max(f[i][j],f[i-1][j-1]+1);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=m;j>=1;j--)
        {
            g[i][j]=max(g[i][j],g[i-1][j]);
            g[i][j]=max(g[i][j+1],g[i][j]);
            if(a[i][j]==1)
            {
                g[i][j]=max(g[i][j],1);
                if(a[i-1][j+1]==1&&g[i-1][j+1]+1==s[i][j+g[i-1][j+1]]-s[i-g[i-1][j+1]-1][j+g[i-1][j+1]]-s[i][j-1]+s[i-g[i-1][j+1]-1][j-1])
                    g[i][j]=max(g[i][j],g[i-1][j+1]+1);
            }
        }
    }
    cout<<max(f[n][m],g[n][1]); 
    return 0;
}

by 地表最强男人 @ 2019-05-01 17:03:43

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,s[2600][2600],a[2600][2600];//s为前缀和 
int f[2600][2600],g[2600][2600],ans=0;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==1)
            {
                f[i][j]=1;
                if(a[i-1][j-1]==1&&f[i-1][j-1]+1==s[i][j]-s[i-f[i-1][j-1]-1][j]-s[i][j-f[i-1][j-1]-1]+s[i-f[i-1][j-1]-1][j-f[i-1][j-1]-1])
                    f[i][j]=max(f[i][j],f[i-1][j-1]+1);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=m;j>=1;j--)
        {
            if(a[i][j]==1)
            {
                g[i][j]=1;
                if(a[i-1][j+1]==1&&g[i-1][j+1]+1==s[i][j+g[i-1][j+1]]-s[i-g[i-1][j+1]-1][j+g[i-1][j+1]]-s[i][j-1]+s[i-g[i-1][j+1]-1][j-1])
                    g[i][j]=max(g[i][j],g[i-1][j+1]+1);
            }
        }
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            ans=max(ans,f[i][j]);
            ans=max(ans,g[i][j]);
        }
    }
    cout<<ans;  
    return 0;
}

by qwe000000 @ 2019-08-13 23:27:26

点我


|