数据...怎么说呢
查看原帖
数据...怎么说呢
1010363
lkjlkjlkj2012楼主2024/10/20 15:25

本蒟蒻一开始把判断不重写成了w!=y&&x!=z,后来改成了w!=y||x!=z,但两次都AC了

1.错误

#include <iostream>
#include <cstring>
using namespace std;
int n,m,a[55][55],f[55][55][55][55],dx[2]={0,1},dy[2]={1,0};
bool check(int x,int y)
{
    return x>=1&&x<=n&&y>=1&&y<=m;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    memset(f,0xc0,sizeof(f));
    f[1][1][1][1]=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=1;k<=n;k++)
                for(int l=1;l<=m;l++)
                    for(int b=0;b<=1;b++)
                        for(int c=0;c<=1;c++)
                        {
                            int w=i+dx[b];
                            int x=j+dy[b];
                            int y=k+dx[c];
                            int z=l+dy[c];
                            if(check(w,x)&&check(y,z)&&w!=y&&x!=z||w==n&&x==m&&y==n&&z==m)
                            {
                                f[w][x][y][z]=max(f[w][x][y][z],f[i][j][k][l]+a[w][x]+a[y][z]);
                            }
                        }
    cout<<f[n][m][n][m];
    return 0;
}

记录1

2.正确

#include <iostream>
#include <cstring>
using namespace std;
int n,m,a[55][55],f[55][55][55][55],dx[2]={0,1},dy[2]={1,0};
bool check(int x,int y)
{
    return x>=1&&x<=n&&y>=1&&y<=m;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    memset(f,0xc0,sizeof(f));
    f[1][1][1][1]=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=1;k<=n;k++)
                for(int l=1;l<=m;l++)
                    for(int b=0;b<=1;b++)
                        for(int c=0;c<=1;c++)
                        {
                            int w=i+dx[b];
                            int x=j+dy[b];
                            int y=k+dx[c];
                            int z=l+dy[c];
                            if(check(w,x)&&check(y,z)&&(w!=y||x!=z)||w==n&&x==m&&y==n&&z==m)
                            {
                                f[w][x][y][z]=max(f[w][x][y][z],f[i][j][k][l]+a[w][x]+a[y][z]);
                            }
                        }
    cout<<f[n][m][n][m];
    return 0;
}

记录2

2024/10/20 15:25
加载中...