RE 0分求助
查看原帖
RE 0分求助
490972
zhangyanhao楼主2023/8/2 22:56
#include <iostream>
using namespace std;
int map[15][15], ans[15][15][15][15];
int n;

void dfs(int x1, int y1, int x2, int y2) {
    int m=0; 
    //1向下走,2向下走(x1+1,y1) (x2+1,y2)
    if (x1+1!=x2+1 and y1!=y2) { 
        if (x1+1<=n and x2+1<=n) {
            if (ans[x1+1][y1][x2+1][y2]==-1) dfs(x1+1, y1, x2+1, y2);
            m=max(m, ans[x1+1][y1][x2+1][y2]);
        }
    }
    //1向下走,2向右走 (x1+1)(y1) (x2)(y2+1)
    if (x1+1<=n and y2+1<=n) { 
        if (x1+1==n and y1==n and x2==n and y2+1==n) {
            ans[x1][y1][x2][y2]=map[x1][y1]+map[x2][y2]+map[n][n];
            return;
        } else if (x1+1!=x2 and y1!=y2+1) {
            if (ans[x1+1][y1][x2][y2+1]==-1) {
                dfs(x1+1, y1, x2, y2+1);
                m=max(m, ans[x1+1][y1][x2][y2+1]);
            }
        }
    }
    //1向右走,2向下走 (x1)(y1+1)  (x2+1)(y2)
    if (x1!=x2+1 and y1+1!=y2) { 
        if (y1+1<=n and x2+1<=n) {
            if (ans[x1][y1+1][x2+1][y2]==-1) dfs(x1, y1+1, x2+1, y2);
            m=max(m, ans[x1][y1+1][x2+1][y2]);
        }
    }
    //1向右走,2向右走
    if (x1!=x2 and y1+1!=y2+1) { 
        if (y1+1<=n and y2+1<=n) {
            if (ans[x1][y1+1][x2][y2+1]==-1) dfs(x1, y1+1, x2, y2+1);
            m=max(m, ans[x1][y1+1][x2][y2+1]);
        }
    }
    ans[x1][y1][x2][y2]=m+map[x1][y1]+map[x2][y2]; //记录本次的最优解
}

int main() {
    freopen("D:\\vscode\\p1004\\p1004.in", "r", stdin); 
    //清除map
    for (int i=1; i<=n; ++i) 
        for (int j=1; j<=n; ++j) map[i][j]=0;
    
    cin>>n;
    while (true) {
        int x, y, num;
        cin>>x>>y>>num;
        if (x==0 and y==0 and num==0) break;
        map[x][y]=num;
    }
    //清零ans
    for (int i=1; i<=n; ++i) 
        for (int j=1; j<=n; ++j)
            for (int k=1; k<=n; ++k)
                for (int l=1; l<=n; ++l) 
                    ans[i][j][k][l]=-1;
    //
    dfs(1, 1, 1, 1);
    cout<<ans[1][1][1][1]-map[1][1];
    return 0;
}

下载了样例数据,在本地运行时能输出正确答案,但提交后就显示RE怎么办?

2023/8/2 22:56
加载中...