我拿错了?(尽快回复)

P1004 [NOIP2000 提高组] 方格取数

你拿了什么啊??
by Ew_Cors @ 2022-01-20 13:03:02


@[tymRocket](/user/559847) ``` #include<bits/stdc++.h> using namespace std; int s[20][20]; int ans = -1e9; int n; void dfs(int x , int y , int x2 , int y2 , int sume){ if(x == n && y == n){ ans = max(ans , sume); return ; } if(x < n){ if(x2 < n) dfs(x + 1 , y , x2 + 1 , y2 , sume + s[x + 1][y] + (x + 1 != x2 + 1 || y != y2) * s[x2 + 1][y2]); if(y2 < n) dfs(x + 1 , y , x2 , y2 + 1 , sume + s[x + 1][y] + (x + 1 != x2 || y != y2 + 1) * s[x2][y2 + 1]); } if(y < n){ if(x2 < n) dfs(x , y + 1 , x2 + 1 , y2 , sume + s[x][y + 1] + (x != x2 + 1 || y + 1 != y2) * s[x2 + 1][y2]); if(y2 < n) dfs(x , y + 1 , x2 , y2 + 1 , sume + s[x][y + 1] + (x != x2 || y + 1 != y2 + 1) * s[x2][y2 + 1]); } } int main(){ cin >> n; while(true){ int a , b , c; cin >> a >> b >> c; if(a == 0 && b == 0 && c == 0){ break; } s[a][b] = c; } dfs(1 , 1 , 1 , 1 , s[1][1]); cout << ans; return 0; } ```
by coldy_rainy @ 2022-01-20 13:06:20


@[tymRocket](/user/559847) void类型能return一个值? ``` if(x < n){ if(x2 < n) return dfs(x + 1 , y , x2 + 1 , y2 , sume + s[x + 1][y] + (x + 1 != x2 + 1 || y != y2) * s[x2 + 1][y2]); if(y2 < n) return dfs(x + 1 , y , x2 , y2 + 1 , sume + s[x + 1][y] + (x + 1 != x2 || y != y2 + 1) * s[x2][y2 + 1]); } if(y < n){ if(x2 < n) return dfs(x , y + 1 , x2 + 1 , y2 , sume + s[x][y + 1] + (x != x2 + 1 || y + 1 != y2) * s[x2 + 1][y2]); if(y2 < n) return dfs(x , y + 1 , x2 , y2 + 1 , sume + s[x][y + 1] + (x != x2 || y + 1 != y2 + 1) * s[x2][y2 + 1]); ``` void是个空类型,不返回任何值。这里明显不能用return dfs(),把return去掉即可
by coldy_rainy @ 2022-01-20 13:08:34


@[tymRocket](/user/559847) **不过还是有个TLE,建议优化**
by coldy_rainy @ 2022-01-20 13:09:57


@[penhaochen](/user/526755) void类函数可以return void类的函数,视为使用了return后面的函数
by GBen @ 2022-01-20 13:22:30


@[GBen](/user/560116) 当在这道题中,去掉return可以过样例提交后还A了#1,#3,#4,#5测试点,也不知道为什么。。。 [就像这样](https://www.luogu.com.cn/record/67258814)
by coldy_rainy @ 2022-01-20 13:27:35


@[GBen](/user/560116) Oh,如果加了return,那么这个函数就会停止,就不能达到dfs的递归效果,那么ans就不会被赋值,始终为0,因此复制样例后只会输出0 一一一一一一一一一一一一一一一本蒟蒻的拙见
by coldy_rainy @ 2022-01-20 13:33:47


@[penhaochen](/user/526755) 没错,我看了源程序总共只递归了15次,而正解有1121次
by GBen @ 2022-01-20 17:50:51


|