@[zhangyanhao](/user/490972)
你freopen("D:\\vscode\\p1004\\p1004.in", "r", stdin); 都不注释掉怎么会过
by 大海中的孤帆 @ 2023-08-04 15:52:44
``` cpp
#include <iostream>
using namespace std;
int map[10][10], ans[10][10][10][10];
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("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;
}
```
我改了freopen,还是RE呀
by zhangyanhao @ 2023-08-04 18:57:16
哦对不起,好像要把freopen屏蔽掉,理解了,谢谢解答
by zhangyanhao @ 2023-08-04 21:32:42
@[zhangyanhao](/user/490972) 要吧freopen注释
by dy182312 @ 2023-09-05 21:04:01