当前位置: 首页 > news >正文

E - Red Polyomino 关于回溯 和爆搜

这题就是爆搜。。虽然看似有2^(nn)的复杂度。。
但是实际上因为相连的限制。。种类非常有限。。样例8
8的就可以看出来。
所以就是爆搜而已。。

记录这题是因为。之前一直在思考回溯 到底和爆搜什么关系。。
目前算是阶段性的一个理解。。
回溯只不过是爆搜的一种方式而已。。
如果我们可以每层递归 都是拷贝。而不是引用。。实际上是不需要回溯的。

回溯只在于样本只有一份。就是传引用的时候。我们只有通过恢复现场。。来尝试其他的可能。
下面两个版本的写法。。就证明了这点。。
总结:回溯只不过是恢复现场的一种手法。。如果现场不需要恢复(每层都拷贝一份新的) 就不需要回溯🔥
而爆搜是一种枚举所有可能的手法。。分步X分类。比较经典的爆搜模型 就是完全二叉树 每个节点两种可能 选和不选。
题目链接

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll __int128_t
#define ar array<int, 2>
#define arr array<int, 3>
int  n, m, k, inf = 1LL << 61, mod = 998244353;// 1e9+7;
const int N = 5e5 + 50;
int ans;
void dfs(vector<string>s) {int cnt = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j) {cnt += s[i][j] == 'o';}if (cnt == k) {ans++;return ;}for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j) {if (s[i][j] != '.')continue;if (cnt) {int d[5] {1, 0, -1, 0, 1};bool ok = 0;for (int c = 0; c < 4; ++c) {int x = i + d[c], y = j + d[c + 1];if (x >= 0 && y >= 0 && x < n && y < n && s[x][y] == 'o')ok = 1;}if (ok == 0)//就是旁边一定要有红色的。。因为相连continue;}s[i][j] = 'o';dfs(s);s[i][j] = '#';dfs(s);//我们传的是整个拷贝的s。这边就不需要回溯。return ;}
}
void solve() {cin >> n >> k;vector<string>a(n);for (auto&a : a)cin >> a;dfs(a);cout << ans;
};signed main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(15);
#ifdef DEBUGfreopen("../1.in", "r", stdin);
#endif//init_f();//init();//expr();// int T; cin >> T; while(T--)solve();return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll __int128_t
#define ar array<int, 2>
#define arr array<int, 3>
int  n, m, k, inf = 1LL << 61, mod = 998244353;// 1e9+7;
const int N = 5e5 + 50;
int ans;
void dfs(vector<string>&s) {int cnt = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j) {cnt += s[i][j] == 'o';}if (cnt == k) {ans++;return ;}for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j) {if (s[i][j] != '.')continue;if (cnt) {int d[5] {1, 0, -1, 0, 1};bool ok = 0;for (int c = 0; c < 4; ++c) {int x = i + d[c], y = j + d[c + 1];if (x >= 0 && y >= 0 && x < n && y < n && s[x][y] == 'o')ok = 1;}if (ok == 0)//就是旁边一定要有红色的。。因为相连continue;}s[i][j] = 'o';dfs(s);s[i][j] = '#';dfs(s);s[i][j] = '.';//回溯本质上就多了这一步而已。。但是可以传引用。。!!!!return ;}
}
void solve() {cin >> n >> k;vector<string>a(n);for (auto&a : a)cin >> a;dfs(a);cout << ans;
};// 回溯只不过是为了还原现场而已。。如果传的不是引用。。。每个图都拷贝一份。那么根本不需要回溯!!!
//回溯只不过是爆搜的一种实现策略。。而已。。每个图都拷贝一份。那么根本不需要回溯!
// signed main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(15);
#ifdef DEBUGfreopen("../1.in", "r", stdin);
#endif//init_f();//init();//expr();// int T; cin >> T; while(T--)solve();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 入门STM32--按键输入
  • 排队辅助功能二手车,全速自适应巡航
  • 适应CLIP作为图像去雾的聚合指导
  • 现在的ai是否和当年的5g一样被夸大了
  • 大模型日报 2024-08-24
  • 初识数据库
  • PG_RMAN 部署与使用
  • GB28181协议设备为何越来越受青睐?
  • 五、Centos7-安装Jenkins
  • ECMAScript性能优化技巧于陷阱
  • 前端手写源码系列(一)—— 手写防抖和节流
  • vue前端实现登录页面的验证码(新手版)
  • 基于x86 平台opencv的图像采集和seetaface6的人脸跟踪功能
  • OpenAI推出新功能:GPT-4o正式上线微调功能,限时免费!
  • TinaSDKV2.0 自定义系统开发
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • classpath对获取配置文件的影响
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Invalidate和postInvalidate的区别
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript编码规范
  • miaov-React 最佳入门
  • PAT A1120
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpringBoot 实战 (三) | 配置文件详解
  • Webpack 4x 之路 ( 四 )
  • 服务器之间,相同帐号,实现免密钥登录
  • 简单基于spring的redis配置(单机和集群模式)
  • 你不可错过的前端面试题(一)
  • 使用API自动生成工具优化前端工作流
  • k8s使用glusterfs实现动态持久化存储
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #AngularJS#$sce.trustAsResourceUrl
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $.ajax中的eval及dataType
  • (20050108)又读《平凡的世界》
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (六)vue-router+UI组件库
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (四) Graphivz 颜色选择
  • .NET 4.0中的泛型协变和反变
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET MVC第三章、三种传值方式
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @Mapper作用
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [AI 大模型] Meta LLaMA-2
  • [Algorithm][综合训练][kotori和气球][体操队形][二叉树中的最大路径和]详细讲解
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改