搜索<1>——DFS与回溯

前言:本系列(搜索)博客主要介绍的是用DFS解决一些问题,并不是图论中的DFS

dfs相信大家都有了解,TA是一个图论中的算法。

中心思想就是:只要干不死,就往死里干!

具体来说,就是只要符合要求,就一直往前搜,知道不行了再回头搜另一种。还是看题吧。

八皇后:

一道很经典的题目。思路就是每次枚举一个皇后,然后把这个皇后占领的所有格子标记,再枚举下一个就OK了。

#include <bits/stdc++.h>
using namespace std;
int row[100],col[100],l[100],r[100];
int ans;
void print(){if(ans<=2){for(int k=1;k<=n;k++)cout<<row[k]<<" ";cout<<endl;}ans++;
}
void dfs(int cnt){if(cnt>n){print();return;}else{for(int i=1;i<=n;i++){if((!col[i]) && (!l[cnt+i]) && (!r[cnt-i+n])){row[cnt]=i;col[i]=1;l[cnt+i]=1;r[cnt-i+n]=1;dfs(cnt+1);//回溯col[i]=0;l[cnt+i]=0;r[cnt-i+n]=0;}}}
}
int main(){int n;    cin>>n;dfs(1);cout<<ans<<endl;return 0;
}

注意要回溯。

P2392:

为什么此题的作者不仅没被kkksc03封,还成了管理员?!?!?!?!?!?!?!?!?!?!?!?!?!

切入正题,那么由于kkksc03左右脑同时做2题(真牛),我们用一个l记录左脑,r记录右脑,枚举每道题交给哪边的脑子解决,找到两边时间较大值的最小值就结束了。

同时,虽然这题一打眼是贪心,但你会发现交上去全WA(或者几乎全WA)......

所以,老老实实DP或者DFS吧。

#include<bits/stdc++.h>
using namespace std;
int l,r,ans,tmp;
int s[4];
int t[21][4];
void dfs(int x,int sub){if(x>s[sub]){tmp=min(tmp,max(l,r));return;}l+=t[x][sub];dfs(x+1,sub);l-=t[x][sub];r+=t[x][sub];dfs(x+1,sub);r-=t[x][sub];
}
int main(){for(int i=0;i<4;i++)cin>>s[i];for(int i=0;i<4;i++){l=r=0;tmp=INT_MAX;for(int j=0;j<s[i];j++)cin>>t[j][i];dfs(0,i);ans+=tmp;}cout<<ans<<endl;return 0;
}

P2036:

思路很简单,dfs每次往后跑,如果超过n了就更新答案,要么添加,要么不添加,分别搜一下,就行了。而且,此题不需要回溯

#include <bits/stdc++.h>
using namespace std;
int s[15],b[15];
int n,ans=INT_MAX;
void dfs(int idx,int sour,int bitter){if(idx>n){if(sour==1 && bitter==0)return;ans=min(abs(sour-bitter),ans);return;}dfs(idx+1,sour*s[idx],bitter+b[idx]);dfs(idx+1,sour,bitter);
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>s[i]>>b[i];dfs(1,1,0);cout<<ans<<endl;return 0;
}

咦,为什么只有70?呵,满分就是70(我也不知道为什么)。

P1036:

突然发现了这个:数据范围说1小于等于n,所以当n=1,,k<n......

首先肯定要有一个判断素数的函数:

bool isprime(int n){for(int i=2;i<=n/i;i++){if(n%i==0)return false;}return true;
}

然后就是剩下的数挨个枚举选不选就行了。

void dfs(int idx,int sum,int lst){if(idx==k && isprime(sum)){ans++;return;}for(int i=lst;i<n;i++)dfs(idx+1,sum+x[i],i+1);
}

所以下面是完整代码:

#include <bits/stdc++.h>
using namespace std;
int x[10];
int n,k,ans;
bool isprime(int n){for(int i=2;i<=n/i;i++){if(n%i==0)return false;}return true;
}
void dfs(int cnt,int sum,int lst){if(cnt==k && isprime(sum)){ans++;return;}for(int i=lst;i<n;i++)dfs(cnt+1,sum+x[i],i+1);
}
int main(){cin>>n>>k;for(int i=0;i<n;i++)cin>>x[i];dfs(0,0,0);cout<<ans<<endl;return 0;
}

OK,以上就是本期的全部内容了。下期我会聊一聊记忆化和剪枝。ヾ( ̄▽ ̄)Bye~Bye~

温馨提示:本期的全部代码直接提交就无法AC,请不要无脑Ctrl C+Ctrl V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练营Day59(单调栈2)

503.下一个更大元素II 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 提醒 这道题和 739. 每日温度 几乎如出一辙&#xff0c;可以自己尝试做一做 class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:dp [-1] * len(n…

什么是网络?

你是一台电脑&#xff0c;你的名字叫 A 很久很久之前&#xff0c;你不与任何其他电脑相连接&#xff0c;孤苦伶仃。 直到有一天&#xff0c;你希望与另一台电脑 B 建立通信&#xff0c;于是你们各开了一个网口&#xff0c;用一根网线连接了起来。 用一根网线连接起来怎么就能&…

【大数据】Flink 架构(一):系统架构

Flink 架构&#xff08;一&#xff09;&#xff1a;系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处…

第九篇【传奇开心果系列】beeware的toga开发移动应用示例:人口普查手机应用

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、实现应用雏形示例代码四、扩展功能和组件的考量五、添加更多输入字段示例代码六、添加验证功能示例代码七、添加数据存储功能示例代码八、添加数据展示功能示例代码九、…

JavaWeb,Vue的学习(上)

概述 Vue的两个核心功能 声明式渲染&#xff1a;Vue 基于标准 HTML 拓展了一套模板语法&#xff0c;使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。响应性&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM ViteVue3项目…

Image Enhancement Guided Object Detection in Visually Degraded Scenes

Abstract 目标检测准确率在视觉退化场景下降严重。一个普遍的解决方法就是对退化图像进行增强然后再执行目标检测。但是&#xff0c;这是一种次优的方案&#xff0c;而且未必对目标检测的准确率有提升&#xff0c;因为图像增强和目标检测两个任务的不同。为了解决这个问题&…

【算法专题】动态规划之回文子串问题

动态规划6.0 动态规划 - - - 回文子串问题1. 回文子串2. 最长回文子串3. 分割回文串Ⅳ4. 分割回文串Ⅱ5. 最长回文子序列6. 让字符串成为回文串的最少插入次数 动态规划 - - - 回文子串问题 1. 回文子串 题目链接 -> Leetcode -647.回文子串 Leetcode -647.回文子串 题目…

elasticsearch8.x版本docker部署说明

前提&#xff0c;当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点&#xff0c;每个节点启动两个es&#xff0c;用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…

5_机械臂运动学基础_矩阵

上次说的向量空间是为矩阵服务的。 1、学科回顾 从科技实践中来的数学问题无非分为两类&#xff1a;一类是线性问题&#xff0c;一类是非线性问题。线性问题是研究最久、理论最完善的&#xff1b;而非线性问题则可以在一定基础上转化为线性问题求解。 线性变换&#xff1a; 数域…

【代码随想录-数组】螺旋矩阵 II

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

设计模式:简介及基本原则

简介 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问&#xff0c;设计模式于己于他人于系统都是多赢的&#xff0c;设计模式使代码编制真正工程化&#xff…

Jenkins邮件推送配置

目录 涉及Jenkins插件&#xff1a; 邮箱配置 什么是授权码 在第三方客户端/服务怎么设置 IMAP/SMTP 设置方法 POP3/SMTP 设置方法 获取授权码&#xff1a; Jenkins配置 从Jenkins主面板System configuration>System进入邮箱配置 在Email Extension Plugin 邮箱插件…

docker compose实现mysql一主多从

参考了很多博客&#xff0c;死磕了几天&#xff0c;最终跑起来了&#xff0c;不容易&#xff0c;晚上喝瓶82年可乐庆祝下。 1、整体文件结构&#xff0c;这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下&#xff1a; version: 3.3 services:mysql-master…

Elasticsearch中的分词器的基本介绍以及使用

目录 一、分词器的基本概念 二、分词器类别 &#xff08;1&#xff09;默认分词器 &#xff08;2&#xff09;IK分词器 &#xff08;3&#xff09;拼音分词器 &#xff08;4&#xff09;自定义分词器 一、分词器的基本概念 在Elasticsearch中&#xff0c;分词器&#xff…

04_前后端交互技术之Ajax异步请求

本课目标 理解什么是同步请求和异步请求理解Ajax的请求原理掌握Ajax的基本用法掌握课堂案例 1. 同步请求与异步请求的区别 1.1 什么是同步请求 同步请求&#xff1a;发送请求后需要等待服务端响应&#xff0c;同步请求阻止代码的执行&#xff0c;这会导致屏幕上出现“冻结”…

Linux exit命令教程:结束当前的登录会话(附案例详解和注意事项)

Linux exit命令介绍 exit命令用于结束当前的登录会话。当你在命令行界面&#xff08;shell&#xff09;运行exit命令时&#xff0c;它会终止你当前的shell会话。 在命令行界面或shell脚本中执行exit命令默认会直接退出终端&#xff0c;或者你还可以在exit命令后添加一个参数&…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

华为HCIP Datacom H12-831 卷14

多选题 1、以下哪些Community属性可以保证BGP路由条目的传播范围只在AS内? A No_Export B No_Export_Subconfed C Interne D No_Advertise 正确答案 A,B 解析&#xff1a;Internet&#xff1a;缺省情况下&#xff0c;所有的路由都属于internet团体。具有此属性的路由…

回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据…

ubuntu-base(arm64与riscv64) 根文件系统, 并用qemu启动

ubuntu-base&#xff08;arm64与riscv64&#xff09; 根文件系统 有个小需求&#xff0c;是在 arm64 和 riscv64 上都跑起来 speccpu 2017 首先在 Qemu 上跑起来&#xff0c;需要考虑需要的【Linux 内核、根文件系统、Bootloader】&#xff0c;其中 Bootloader 在 Qemu 中可以很…