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

龙岗网站建设价位搜索引擎关键词排名优化

龙岗网站建设价位,搜索引擎关键词排名优化,做网站排名要多少钱,广西汽车网网站建设由于每种配料的用量范围是 1 到 3 克,且有 10 种配料,我们可以使用深度优先搜索(DFS)来枚举所有可能的配料组合,然后筛选出美味程度等于给定值 n 的组合。 【题目】: 【算法思路】 全局变量&#xff1a…

由于每种配料的用量范围是 1 到 3 克,且有 10 种配料,我们可以使用深度优先搜索(DFS)枚举所有可能的配料组合,然后筛选出美味程度等于给定值 n 的组合。

【题目】:
在这里插入图片描述

【算法思路】

  • 全局变量

MAX:常量,代表配料的种类数量,本题中固定为 10。

n:用于存储输入的给定美味程度,该值决定了满足条件的配料组合。

ans:定义为二维向量 std::vector<std::vector<int>>,其作用是存储所有符合要求(即配料总质量等于给定美味程度 n)的配料组合。

path:是一个一维数组,数组长度为 MAX,用来记录在深度优先搜索过程中当前正在探索的配料组合情况。

  • 深度优先搜索函数

函数参数

  • step:表示当前正在考虑的配料编号,取值范围是从 0 到 MAX - 1
  • sum:记录到当前步骤为止,所使用配料的总质量。

搜索范围:基于配料的种类数,本题中 MAX 被设定为 10,意味着需要对 10 种配料进行组合尝试。

存储结构:使用二维向量 ans 来存储所有满足条件的配料组合,无需额外定义二维数组。

标记情况:此问题无需使用标记数组。原因在于 “烤鸡” 问题是对配料组合进行枚举,每种配料的使用情况相互独立,且每个配料都必须被考虑一次,不会出现重复访问同一状态而陷入无限循环的情况。

递归逻辑

  • 未考虑完 10 种配料时:对于当前的配料(编号为 step),其用量有 1 克、2 克、3 克这三种选择。依次枚举这三种用量,将当前配料的用量记录到 path[step] 中,然后递归调用深度优先搜索函数 dfs(step + 1, sum + 当前用量),继续处理下一种配料。
  • 考虑完 10 种配料时:检查当前配料组合的总质量sum是否等于给定的美味程度n
    • 若相等,说明找到了一种满足条件的配料组合。将 path 数组中的内容复制到一个临时向量 temp 中,再把 temp 添加到 ans 向量里。
    • 若不相等,表明该配料组合不符合要求,直接返回,结束当前搜索路径,回溯到上一层继续尝试其他组合。
  • 输出:①从第0种配料开始搜索,最后输出满足条件的配料组合的数量;

②使用范围for循环函数输出每种配料组合

【代码示例】

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;const int MAX = 10;//范围:配料的种类数 
int n;//给定的美味程度 
vector<vector<int>> ans;//存储所有满足条件的配料组合
int path[MAX];//记录当前正在搜索的配料组合// 深度优先搜索函数
void dfs(int step,int sum){//当已经考虑完10种配料if(step == MAX){ if(sum == n){//检查总质量是否等于给定的美味程度vector<int> temp;//将当前的配料组合添加到临时向量中for(int i=0;i<MAX;i++){temp.push_back(path[i]);} //将临时变量添加到结果数组中ans.push_back(temp); }return;} //枚举当前配料的用量for(int i=1;i<=3;i++){path[step] = i;//设置当前配料的用量dfs(step + 1,sum + i);//递归调用处理下一种配料 } 
} int main(){cin>>n;//读取输入的美味程度 dfs(0,0);//从第0种配料开始,总质量初始为0cout<<ans.size()<<endl;//输出满足条件的配料组合的数量//输出每种配料组合for(const auto& vec : ans){for(int i=0;i<MAX;i++){cout<<vec[i];if(i < MAX-1){cout<<" ";}}cout<<endl;}return 0;
}

剪枝优化相关边界条件

假设当前已经考虑了 step 种配料,总质量为 sum,即使后面剩下的 MAX - step种配料都取最小用量 1 克,总质量sum + (MAX - step) 仍然大于 n,或者即使都取最大用量 3 克,总质量sum + 3 * (MAX - step) 仍然小于 n,那么就可以提前终止当前搜索路径。
【代码示例】

if (sum + (MAX - step) > n || sum + 3 * (MAX - step) < n) {return;
}

通过剪枝操作,可以减少不必要的递归调用,提高算法的效率。

http://www.cadmedia.cn/news/3591.html

相关文章:

  • 深圳企业网站推广论述搜索引擎优化的具体措施
  • 信息图表设计网站新手怎么开始做电商
  • 肖云路那有做网站公司西安疫情最新数据消息中高风险地区
  • 网页设计师培训班大连如何做好seo优化
  • 模板网站建设代理商百度小说搜索风云榜
  • 怎么做网站下载链接百度短链接在线生成
  • 威海泰浩建设集团有限公司网站杭州排名优化公司电话
  • 网站建设中扒站为什么是违法的百度推广云南总代理
  • 英雄联盟网站建设网络营销公司注册找哪家
  • 山东省建设局网站监理员考试seo优化的内容有哪些
  • 企业门户网站建设与发展趋势网站管理工具
  • 网站建设网站定制市场推广计划方案
  • 望野什么意思百度seo优化网站
  • 邯郸网站建设在哪里今日小说搜索风云榜
  • 医院网站建设的资料黄冈网站seo
  • 服装搭配网站建设策划书搜索推广广告
  • 如何查看vs中建设好的网站自动发外链工具
  • 某公司的网站建设的资金预算书网站推广的作用在哪里
  • 房城乡建设部网站百度百度一下首页
  • 优化方案2021版英语seo收录查询
  • 建设网站公司哪个好sem论坛
  • 寻求完善政府网站建设市场调研报告800字
  • 旅游网站怎么用dw做百度seo关键词报价
  • 网站建设运营合同书微博营销软件
  • 南宁网站制作设计百度账号个人中心
  • 网站建设需要具备的能力西安今日头条新闻
  • 对伊利网站建设建议小程序开发一个多少钱啊
  • 网站前台设计方案经典软文案例标题加内容
  • 网站建设辶首先金手指十四东莞seo网站推广建设
  • flash布局 的优秀网站找网站公司制作网站