The Lakes

The Lakes

本质上是个染色问题,太久没写搜索,出现了错误。

1|0最初做法

int main() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (vis[i][j] == false && a[i][j] != 0) {vis[i][j] = true; dfs(i, j, a[i][j]);} } } } void dfs(int x, int y, long sum) { ans = max(sum, ans); for (int i = 0; i < 4; i++) { int dx = x + move[i][0], dy = y + move[i][1]; if (check(dx, dy) == true) { vis[dx][dy] = true; dfs(dx, dy, sum + a[dx][dy]); } } }

不回溯的想法没问题,因为是可达性不是路径问题。

但是偏偏计算总和的时候,就忘了这是可达性。

显然,该函数计算的总和是一条路径的总和,而非一块染色的总和。

改成计算所有到达的权值和即可。

2|0正确做法

int main() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (vis[i][j] == false && a[i][j] != 0) {sum = 0; vis[i][j] = true; dfs(i, j); ans = max(sum, ans);} } } } void dfs(int x, int y) { sum += a[x][y]; for (int i = 0; i < 4; i++) { int dx = x + move[i][0], dy = y + move[i][1]; if (check(dx, dy) == true) { vis[dx][dy] = true; dfs(dx, dy); } } }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17948045.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示