网站平台搭建流程做的网站有营销效果吗
网站平台搭建流程,做的网站有营销效果吗,重庆装修公司口碑最好的是哪家,临沂网站制作页面今日复习计划#xff1a;DFS搜索基础
1.简介
搜索方法#xff1a;穷举问题解空间部分#xff08;所有情况#xff09;#xff0c;从而求出问题的解。
深度优先搜索#xff1a;本质上是暴力枚举
深度优先#xff1a;尽可能一条路走到底#xff0c;走不了再回退。
2…今日复习计划DFS搜索基础
1.简介
搜索方法穷举问题解空间部分所有情况从而求出问题的解。
深度优先搜索本质上是暴力枚举
深度优先尽可能一条路走到底走不了再回退。
2.DFS和n重循环
给定一个数字x将其拆分成3个正整数后一个要求大于等于前一个给出方案。
最简单的思想三重循环暴力求解。
若是拆分成n个正整数就需要实现n重循环
n重循环 特定的树状结构 DFS搜索
举个例子
给定一个数字6将其 拆分成3个正整数后一个要求大于等于前一个给出方案。
将其拆分成3个正整数当然需要3重循环
第一层0
第二层1 2 3 4 5 6
第三层6组1 2 3 4 5 6分别连接第二层的每个数字
这就是我们上数学时经常画的树状结构图。
n重循环同样的道理
给定一个数字x将其 拆分成n个正整数后一个要求大于等于前一个给出方案。
需要n重循环也就是需要n层树状结构
用DFS从上往下找一条合法的路径所谓合法就是要满足路径值不递减长度为n和为x三个条件。
我来把它转化成代码
def dfs(depth):# depth表示当前处于第depth层# 递归出口if depth n:# 判断数字是否递增for i in range(1,n):if path[i] path[i - 1]:continueelse:returnif sum(path) ! x:return# 这才是我们要的答案print(path)return# 对于每一层枚举当前拆出的数字for i in range(1,x 1):path[depth] i # 当前层拆出了一个i记录上去dfs(depth 1)x int(input()) # 题目给的数字
n int(input()) # 需要拆分成n重循环
# path [i] # 表示第i个数字,给path一个初始值
path [0] * n
dfs(0)
运行结果 当然了可以优化
def dfs(depth,last_value):# depth表示当前处于第depth层# 递归出口if depth n:if sum(path) ! x:return# 这才是我们要的答案print(path)return# 对于每一层枚举当前拆出的数字for i in range(last_value,x 1):path[depth] i # 当前层拆出了一个i记录上去dfs(depth 1,i)x int(input(输入题中的数字)) # 题目给的数字
n int(input(请输入题目要求要拆分成几重循环)) # 需要拆分成n重循环
# path [i] # 表示第i个数字,给path一个初始值
path [0] * n
dfs(0,0)运行结果 这里的区别是我举个例子
给定一个数字6将其 拆分成3个正整数后一个要求大于等于前一个给出方案。
将其拆分成3个正整数当然需要3重循环
第一重0
第二重1 2 3 4 5 6
第三重1 2 3 4 5 6对应数字1 2 3 4 5 6对应数字23 4 5 6对应数字3 4 5 6对应数字45 6对应数字56对应6
就是把不必要的分支去掉了类似于《运筹学》中“分支定界法”的“减支”这一步骤
例题1分糖果
题目描述
两种糖果分别于9个和16个要全部分给7个小朋友每个小朋友得到的糖果总数最少为2个最多为5个问有多少种不同的分法且糖果必须全部分完。
只要有其中一个小朋友在两种方案中分到的糖果不完全相同这两种方案就算两种不同的方案。
答案提交
这是一道结果填空的题你只需要算出结果都提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
思路
用7重循环每重循环代表一个小朋友每个小朋友枚举自己的糖果情况。
参考答案
ans 0
def dfs(depth,n,m):# depth第depth个小朋友# n:第一种糖果的剩余量# m第二种糖果的剩余量# 递归出口if depth 7:if n 0 and m 0:global ansans 1return# 接下来枚举每个小朋友的情况# 第一种糖果的情况for i in range(0,6):# 因为每个人最多5个糖果# 第二种糖果的情况for j in range(0,6):# 接下来是题目所给的条件if 2 i j 5 and i n and j m:dfs(depth 1,n - i,m - j)dfs(0,9,16) # 这是题目给的初始值
print(ans)运行结果 例题2买瓜
题目描述
小蓝正在一个瓜摊上买瓜瓜摊上共有n个瓜每个瓜的质量为Ai。
小蓝刀工了得他可以把任何瓜劈成等重的两份不过每个瓜只能劈一刀小蓝希望买到的瓜的重量的和恰为m。
请问小蓝至少要劈多少个瓜才能买到质量恰好为m的瓜。
如果怎样小蓝都无法得到总重恰好为m的瓜请输出-1。
输入描述
输入的第一行包含两个整数nm用一个空格分开分别表示瓜的个数和小蓝想买到的瓜的总重量。
第二行包括n个整数Ai相邻整数之间用空格分隔分别表示每个瓜的重量。
输出描述
输出一个整数表示答案。
思路
n重循环每重循环3种情况买一个买一半不买。
参考答案
def dfs(depth,weight,cnt):if weight m:returnif weight m:global ansans min(ans, cnt)if depth n:return# 枚举当前3种情况dfs(depth 1,weight 0,cnt)dfs(depth 1,weight A[depth],cnt)dfs(depth 1,weight A[depth] // 2,cnt 1)n,m map(int,input().split())
m * 2
A list(map(int,input().split()))
A [x * 2 for x in A]
ans n 1
dfs(0,0,0)
if ans n 1:ans -1print(ans)
运行结果 OK这篇就先写到这里下次继续
若有不懂的地方可以互相交流
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87261.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!