递推与递归

92. 递归实现指数型枚举 - AcWing题库

#include <bits/stdc++.h>
using namespace std;
const int N=17;
int n;
bool vis[N];//记录某一个数是否出现过
void dfs(int dep){// if(vis[dep])continue;//没有这一句 因为一定不会有已经选过的数if(dep==n+1){//对于每个数都做完了选与不选的决定for(int i=1;i<=n;i++){if(vis[i])cout<<i<<' ';}cout<<'\n';return ;//记得要return}vis[dep]=1;dfs(dep+1);vis[dep]=0;dfs(dep+1);
}
int main(){cin>>n;dfs(1);return 0;
}

93. 递归实现组合型枚举 - AcWing题库

#include <bits/stdc++.h>
using namespace std;
const int N=100;
int a[N];
int n,m;//n个数中选择m个
int vis[N];
void dfs(int dep,int st){//st数组是为了保证顺序每次只往后面找if(dep==m+1){//选够m个数了 该选第m+1个数了for(int i=1;i<=n;i++){if(vis[i]==1)cout<<a[i]<<" ";}cout<<'\n';return ;}for(int i=st;i<=n;i++){if(!vis[i]){vis[i]=1;//这层有一个数 才去搜索下一层(重要)dfs(dep+1,i+1);//这里是i+1 因为第i个数字做出判断之后下次要判断的应该是它后面的数vis[i]=0;}}
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++)a[i]=i;dfs(1,1);return 0;
}

 94. 递归实现排列型枚举 - AcWing题库

#include <bits/stdc++.h>
using namespace std;
const int N=17;
int n;
bool vis[N]={};//记录某一个数是否出现过
vector<int>ans;
void dfs(int dep){//这里的dep表示的是够多少个数if(dep==n+1){for(auto i:ans)cout<<i<<' ';cout <<'\n';return ;}for(int i=1;i<=n;i++){if(vis[i])continue;vis[i]=1;ans.push_back(i);dfs(dep+1);//这里要是搜索下一个位置 一定要是dep+1vis[i]=0;ans.pop_back();}
}
int main(){cin>>n;dfs(1);return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N=17;
int n;
bool vis[N]={};//记录某一个数是否出现过
vector<int>ans;
void dfs(int dep,int st){//这里的dep表示的是够多少个数if(dep==n+1){for(auto i:ans)cout<<i<<' ';cout <<'\n';return ;}for(int i=st;i<=n;i++){if(vis[i])continue;vis[i]=1;ans.push_back(i);dfs(dep+1,st+1);//这里要是搜索下一个位置 一定要是dep+1vis[i]=0;ans.pop_back();}
}//这样的意思是从第一个数开始搜 答案一定要够n个数才能输出
int main(){cin>>n;dfs(1,1);return 0;
}

1537. 递归实现排列类型枚举 II - AcWing题库

#include <bits/stdc++.h>
using namespace std;
const int N=12;
int a[N],vis[N];
int n;
vector<int>ans;
void dfs(int dep){if(dep==n+1){for(int i=0;i<n;i++)cout<<ans[i]<<" \n"[i==n-1];return ;}for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;ans.push_back(a[i]);dfs(dep+1);ans.pop_back();vis[i]=0;while(a[i + 1] == a[i]) i++;//剪去重复的 每一个数后面会分出来不同的枝,//使相同的数分出来的相同枝只出现一次,可以避免重复输出}}return ;
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1);dfs(1);return 0;
}

 717. 简单斐波那契 - AcWing题库

#include <bits/stdc++.h>
using namespace std;
int n,q;
const int N=100007;
int a[N];
int dp[N];
void solve(){dp[1]=0;dp[2]=1;dp[3]=1;for(int i=4;i<=n;i++)dp[i]=dp[i-1]+dp[i-2];for(int i=1;i<=n;i++)cout<<dp[i]<<' ';
}
int main(){int t=1;cin>>n;while(t--)solve();return 0;
}

唯一分解定理:一个数可以由若干个质数的若干次方相乘得到

也可以通过若干个2的次方相加得到

95. 费解的开关 - AcWing题库

好难啊这题我哭死了

#include <bits/stdc++.h>
using namespace std;const int N = 6;
int dx[N] = {-1, 0, 1, 0, 0}, dy[N] = {0, 1, 0, -1, 0};
char g[N][N], backup[N][N];// 这个操作是把(x, y)以及上下左右的灯都变成相反的颜色
void turn (int x, int y)
{for (int i = 0; i < 5; i ++ ){int a = x + dx[i], b = y + dy[i];//如果在边界外边,直接忽略即可if (a < 0 || a >= 5 || b < 0 || b >= 5) continue;g[a][b] ^= 1;   //异或,不同的时候就变成相反的数//同0异1}}int main()
{int n;scanf("%d", &n);while(n -- ){// 按行输入,把每一行当成一个字符串for (int i = 0; i < 5; i ++ ) cin >> g[i];int res = 0x3f3f;// 这里我们枚举了第一行的32种按法,不用管是亮是灭,把第一行所有情况都按一遍// 按每种情况的第一行,去遍历接下来的行// 枚举32种第一行的按法只是可能会减少步数,如果直接从第二行开始答案一定是固定的了,找不到最优解或者可能没有解//枚举第一行的意义是:不需要在意第一行的灯是灭是暗,只需把第一行的按法枚举一遍,也就是我们说的 “操作”,
//每个位置都有两种选择,按(用1表示)或者不按(用0表示),遍历这32种操作引发的情况,
//每一次再通过res = min(res, step);把最小步数存一下,就能找到最优解for (int op = 0; op < 32; op ++ ){//枚举第一行每一种状态 //好好想想这里为什么要是<32:11111是31 
//是说我们输入的已知的是第一行灯亮或暗的状态,而我们枚举的32种是我们对灯的操作,按还是不按。// 我在对这种情况操作的时候,得先备用一下// 把原始数组备份一下,然后操作g,操作完了还原,然后再操作memcpy(backup, g, sizeof g);int step = 0;// 第一行的按法(在这里 1 表示按了, 0 表示不按),这里只是为了输出第一行按完之后的状态for (int i = 0; i < 5; i ++ )if (op >> i & 1)  // 数字2 对应了 00010 表示第2个位置的按一下// 00010 >> 1 & 1  是1 所以turn(0, 1) 就是第一行第二个位置{                 // 数字3 对应了00011 表示第1 和第2个位置的按一下step ++ ;turn (0, i);;}// 然后通过第一行按完之后的状态,按234行for (int i =0; i < 4; i ++ )for (int j = 0; j < 5;j ++ )if (g[i][j] == '0'){step ++;turn (i + 1, j);  // 如果这个位置是灭的,就按下一行对应的位置}bool dark = false;for (int j = 0; j < 5; j ++ )if (g[4][j] == '0'){dark = true;break;}// 对于32种情况的这一种,如果所有的全亮就记录下步数(事实上只记录了最后一行是否dark)if (!dark) res = min(res, step);memcpy (g, backup, sizeof g);}if(res > 6) res = -1;cout << res << endl;}return 0;
}

116. 飞行员兄弟 - AcWing题库 

//一个把手改变,会使所在行列的所有把手全部反转
//特点:①在最优解里面每个把手只按一次,按两次没有区别,
//②按的顺序无关紧要,最终取决于这个把手按的次数!!!
//思考这个题可以递推出来吗?  答案是:很难
//可以想一想,前面的题都是通过某种顺序,每一次都是影响一个灯泡,但是这个题
//不能使用前面的办法,因为操作一次会影响好多灯泡。所以想一想朴素做法//我们发现这个题的数据范围很小,所以尝试用暴力解决ac
//暴力思路:①16个开关,所有开关的状态数量想一想是多少? 答案是2^16!这个我感觉
//我这么笨还是可以想出来的,往后怎么想呢?
//状态数量即最大操作次数2^16(65536),既然也不大,那就①枚举所有的方案,
//然后按照这个方案来操作
//②如果可以实现把手全开,证明此方案合法
//③然后统计这个方案里面需要操作的把手数量
//④在所有能按的开关数量里取一个最小值
//ac
//输出方案注意:若两种方案步数相同,按字典序(先按横坐标排序,再按纵坐标排序)#include <bits/stdc++.h>
//这个宏定义其实也就最后输出的时候应用了(如果我没猜错的话),但是y总的习惯就是好习惯!
#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;const int N=5;char g[N][N],backup[N][N];//映射函数
int get(int x,int y){return x*4+y;//返回第x行第y列上的数是多少
}void turn_one(int x,int y){if(g[x][y]=='+') g[x][y]='-';else g[x][y]='+';
}void turn_all(int x,int y){for(int i=0;i<4;i++){turn_one(x,i);//关闭这一行所有的 turn_one(i,y);//关闭这一列的全部//xy被关闭了两次 相当于没变 }turn_one(x,y);//对xy也要改变 }int main(){for(int i=0;i<4;i++)for(int j=0;j<4;j++)cin>>g[i][j];vector<PII> res;//这是记录方案所需要的结构//枚举所有的方案for(int op=0;op<(1<<16);op++){//枚举每一种方案 1代表我们要去操作那个灯vector<PII> temp;//temp里面存的是方案//先备份一下,为什么?因为这又不是最终方案,我们要把所有方案都试一遍,求最少的memcpy(backup,g,sizeof g);//枚举16个位置,进行操作for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(op>>get(i,j)&1) //如果当前位置是1(我们在方案中准备操作)的话--get的作用就是返回二进制数中那一位是第几位,从而判断是否为1{temp.push_back({i,j});//按一下开关turn_all(i,j);}//判断所有灯泡是否全亮bool has_closed=false;for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(g[i][j]=='+') has_closed=true;if(has_closed==false){//如果方案为空或者他的操作数大于我们刚存好的新的方案,那么就修改它if(res.empty()||res.size()>temp.size()) res=temp;}//还原回来,供下一个方案操作memcpy(g,backup,sizeof g);}//因为没说无解,所以可以猜想一下一定有解cout<<res.size()<<'\n';//这里的迭代函数就是一种简便写法,不要误解//另外原题下标从1开始,所以下面加1了for(auto op:res) cout<<op.x+1<<" "<<op.y+1<<'\n';//for(int i=0;i<res.size();i++){//	cout<<res[i].x+1<<" "<<res[i].y+1<<'\n';//}return 0;
}

 1208. 翻硬币 - AcWing题库

#include <bits/stdc++.h>
using namespace std;
const int N=107;
char change(char &ch){if(ch=='*') return 'o';return '*';
}char a[N];
char b[N];
int main(){//读不进去可以尝试 cin>>s+1,cin>>s,cin.ignore(),getline(cin,a),cin.getline(a,N);cin.getline(a,N);cin.getline(b,N);// cin>>(a+1);// cin>>(b+1);int n = strlen(a);int step = 0;for(int i = 0; i < n; i++){if(a[i] != b[i]){a[i] = change(a[i]);if(i+1 < n) {a[i+1] = change(a[i+1]);}step++;}}cout << step;return 0;
}

 

 

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

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

相关文章

NCP1031DR2G集成DC-DC转换器 为以太网供电设备提供低成本、高可靠性解决方案

NCP1031DR2G是微型高电压单片 DC-DC 转换器&#xff0c;带有片上电源开关和启动电路。使用极少的外部部件&#xff0c;将实施若干开关稳压器应用所需的所有有源电源、控制逻辑和保护电路相结合&#xff0c;这些应用有辅助侧偏置电源和低功率 DC-DC 转换器。此控制器系列适用于 …

Learn OpenGL 17 立方体贴图

立方体贴图 我们已经使用2D纹理很长时间了&#xff0c;但除此之外仍有更多的纹理类型等着我们探索。在本节中&#xff0c;我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型&#xff1a;立方体贴图(Cube Map)。 简单来说&#xff0c;立方体贴图就是一个包含了…

OpenCV Steger算法提取条纹中心线

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Steger 算法是一种常用的图像边缘检测算法,可以用于提取图像中的中心线或边缘信息。它的理论假设是:条纹的亮度是按照高斯分布呈现的,即中心亮两侧渐暗。 其计算过程如下所述: 1、首先,我们需要计算每个点Hess…

Kali Linux结合cpolar内网穿透实现公网环境SSH远程访问

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

鸿蒙开发实战案例—QQ联系人开发教程

本次案例挑选了QQ4个tab中相对较难的一个页面进行开发 先看一下本次案例的最终效果图&#xff1a; 这个页面的难点在于在List组件又嵌套了一个可以左右滑动的联系人分类&#xff0c;以及好友分组的展开和收起。 现在我们从上到下来开发这个界面&#xff0c;首先是导航栏&…

适合一个人开的实体店:轻松创业,快速盈利的秘诀

在当今的创业潮流中&#xff0c;很多人都渴望拥有一份属于自己的事业。如果你也想独自创业&#xff0c;开一家实体店&#xff0c;那么这篇文章将为你提供一些有价值的干货信息。作为一名经营5年酸奶吧的创业者&#xff0c;我将分享一些经验和见解&#xff0c;帮助你轻松创业并实…

【MD】金属-半导体界面超快辐射诱导熔化的分子动力学模拟

这篇文章是一篇发表在《Journal of Applied Physics》上的论文&#xff0c;标题为“Molecular dynamics simulations of ultrafast radiation induced melting at metal–semiconductor interfaces”&#xff0c;作者为Ashwin Ravichandran, Mohit Mehta, Andrew A. Woodworth,…

Python爬虫案例-爬取主题图片(可以选择自己喜欢的主题)

2024年了&#xff0c;你需要网络资源不能还自己再慢慢找吧&#xff1f; 跟着博主一块学习如何利用爬虫获取资源&#xff0c;从茫茫大海中寻找那个她到再妹子群中找妹子&#xff0c;闭着眼睛都可以找到合适的那种。文章有完整示例代码&#xff0c;拿过来就可以用&#xff0c;欢迎…

洛谷 [传智杯 #5 初赛] B-莲子的机械动力学

题目链接&#xff1a;[传智杯 #5 初赛] B-莲子的机械动力学 题目背景 【题目背景和题目描述的两个题面是完全等价的&#xff0c;您可以选择阅读其中一部分。】 专攻超统一物理学的莲子&#xff0c;对机械结构的运动颇有了解。如下图所示&#xff0c;是一个三进制加法计算器的…

Django 反向解析路由

app2.urls.py from django.urls import path, re_path from . import viewsurlpatterns [path(index, views.index, nameindex),path(url_reverse, views.url_reverse, nameapp2_url_reverse), # 使用reverse()方法反向解析 ,name对于视图的reverse("app2_url_reverse&…

面临挑战:共享WiFi贴项目能否长久存在?

共享WiFi贴项目会长久吗&#xff1f;这个问题是很多创业者想要了解的事情&#xff0c;随着5G网络和共享经济的兴起&#xff0c;共享WiFi贴项目应运而生。在这个信息时代&#xff0c;网络已成为人们日常生活中不可或缺的一部分&#xff0c;而WiFi作为网络的一种接入方式&#xf…

什么是大型语言模型(LLM)?

大型语言模型 (LLM) 是一种能够理解和生成人类语言文本的机器学习模型。它们通过分析大量语言数据集来工作。 一、什么是大型语言模型 (LLM)&#xff1f; 大型语言模型 (LLM) 是一种人工智能 (AI) 程序&#xff0c;它可以识别和生成文本以及完成其他任务。LLM 经过了庞大的数据…

(vue)Module Error (from ./node_modules/eslint-loader/index.js)

(vue)Module Error (from ./node_modules/eslint-loader/index.js) 方法1&#xff1a;直接关闭eslint // vue.config.js module.exports {lintOnSave: false, //关闭eslint语法检查...... }方法2&#xff1a; 参考&#xff1a;解决参考 解决参考&#xff1a;如何修复vue-cli…

Ollama 运行 Cohere 的 command-r 模型

Ollama 运行 Cohere 的 command-r 模型 0. 引言1. 安装 MSYS22. 安装 Golang3. Build Ollama4. 运行 command-r 0. 引言 Command-R Command-R 是一种大型语言模型&#xff0c;针对对话交互和长上下文任务进行了优化。它针对的是“可扩展”类别的模型&#xff0c;这些模型在高…

uniapp+uview 学习笔记(二)—— H5开发

文章目录 前言一、开发步骤1.创建项目2.安装组件库并导入使用3.封装请求4.国际化5.打包 总结 前言 本文主要介绍使用uniapp框架和uview组件库进行H5开发&#xff0c;需要用到的开发工具为HBuilder X。 一、开发步骤 1.创建项目 打开HBuilder X&#xff0c;在顶部栏目选择 新…

网络安全框架和云安全参考架构介绍

目录 一、网络安全框架 1.1 概述 1.2 IATF框架 1.2.1 框架来源 1.2.2 框架结构图 1.2.3 框架内容 1.2.3.1 人&#xff08;People&#xff09; 1.2.3.2 技术&#xff08;Technology&#xff09; 1.2.3.3 操作&#xff08;Operation&#xff09; 1.3 NIST网络安全框架 …

javaAPI操作Elasticsearch

mapping属性 mapping是对索引库中文档的约束, 常见的mapping属性包括: type: 字段数据类型,常见的简单类型有: 字符串: text(可分词的文本), keyword(精确值, 例如: 品牌,国家)数值: long, integer, short, byte, double, float布尔: boolean日期: date对象: object index: 是否…

Hive 数据迁移与备份

迁移类型 同时迁移表及其数据&#xff08;使用import和export&#xff09; 迁移步骤 将表和数据从 Hive 导出到 HDFS将表和数据从 HDFS 导出到本地服务器将表和数据从本地服务器复制到目标服务器将表和数据从目标服务器上传到目标 HDFS将表和数据从目标 HDFS 上传到目标 Hiv…

FX110网:“炒金热”再现,汇友却被困在了假冒万洲金业!

近日&#xff0c;一汇友炒金就选错了平台&#xff0c;他交易的“万洲金业”不对劲&#xff01; 在假冒“万洲金业”反复折腾 据汇友描述&#xff0c;他此前经朋友指导&#xff0c;下载了一个“万洲金业”的APP&#xff0c;该平台宣称为香港金银业贸易场AA类141号行员&#xff0…

在Linux系统安装MySQL步骤

准备工作&#xff1a;下载好mysql&#xff08;Mariadb&#xff09;安装包&#xff1a; 第一步&#xff1a;检查系统中是否有自带的MySQL&#xff08;Mariadb&#xff09;&#xff1b; # 下面这两个都执行一下 [rootcentos101 opt]# rpm -qa | grep mysql [rootcentos101 opt]#…