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

网站建设 手机app市场调研怎么做

网站建设 手机app,市场调研怎么做,家庭电脑做网站,芜湖做网站公司文章目录 518.零钱兑换 II377.组合总和IV 在动态规划算法问题中,存在两种十分相似的问题,一个就是 找零钱问题,另一个是组合总和问题 找零钱问题,其实是零钱问题的一个组合问题,只要零钱的种类和数目相同,就…

文章目录

  • 518.零钱兑换 II
  • 377.组合总和IV

在动态规划算法问题中,存在两种十分相似的问题,一个就是 找零钱问题,另一个是组合总和问题

找零钱问题,其实是零钱问题的一个组合问题,只要零钱的种类和数目相同,就是一种方案;组合总和问题 是一个排列问题,1,2 和 2,1 其实是两种情况的问题

问题的关键点:

  • 组合总和计算的是排列,完全背包计算的是组合。比如 1,2 和 2,1 这两个排列,在本题是有区别的,是两种方案;但在完全背包中这两个排列没有区别,只算一种方案。
  • 从代码上看,计算排列(本题)需要外层循环枚举体积,内层循环枚举物品;计算组合(完全背包)需要外层循环枚举物品,内层循环枚举体积。

518.零钱兑换 II

518.零钱兑换 II

在这里插入图片描述

思路分析:要硬币的种类数目不同,对应的数量不同 才算的是 不同的方案数目,所以动态规划的话,外层循环是遍历硬币的种类,内存循环是amount

递归:因为是相同种类的物品的选择,数目相同的时候,是算同一种方案的,所以要使用两个变量,i用来记录当前遍历到的物品,c用于表示当前所剩余的金额(空间)

class Solution:def change(self, amount: int, coins: List[int]) -> int:# 先使用记忆化搜索@cache# 前i种物品组成金额c的方案数目def dfs(i,c):# 如果遍历完,并且金额为0 就返回1种方案if i < 0:return 1 if c == 0 else 0# 不够的情况,就递归前i-1种if c < coins[i]:return dfs(i-1,c)return dfs(i-1,c) + dfs(i,c-coins[i])return dfs(len(coins) - 1,amount)

转换为动态规划:

class Solution:def change(self, amount: int, coins: List[int]) -> int:n = len(coins)f = [[0] * (amount + 1) for _ in range(n + 1)]f[0][0] = 1for i, x in enumerate(coins):for c in range(amount + 1):if c < x:f[i + 1][c] = f[i][c]else:f[i + 1][c] = f[i][c] + f[i + 1][c - x]return f[n][amount]

当然,这个二维的动态规划,我们可以转化为一维

class Solution:def change(self, amount: int, coins: List[int]) -> int:f = [1] + [0] * amountfor x in coins:for c in range(x, amount + 1):f[c] += f[c - x]return f[amount]

377.组合总和IV

377.组合总和IV

在这里插入图片描述

思路分析:这个题目就是爬楼梯的变形,爬楼梯的原型是每次可以向上爬一个或者2步,问可以到达顶部n的方案的次数,而在这题的时候,每次向上的步数是nums[i]里面的数,顶部的高度是 target

和零钱问题的对比,由于我们每次的选择的步伐的大小都可以重复的,所以我们并不用传递两个参数,只用传递剩余的空间i,而在每一个空间i下的递归,我们都会逐一枚举可能得步伐

class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:@cachedef dfs(i):# 到达底部返回if i == 0:return 1# return sum(dfs(i-x) for x in nums if x<= i)ans = []# 枚举可以移动的步数for x in nums:if x <= i:ans.append(dfs(i-x))return sum(ans)return dfs(target)

1:1转化为动态规划

class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:# 排列的问题,物品可以重复,物品放内层循环# def dfs(i):# 	# 到达底部返回#     if i == 0:#         return 1#     ans = []#     # 枚举可以移动的步数#     for x in nums:#         if x <= i:#             ans.append(dfs(i-x))#     return sum(ans)# 转化为动态规划dp = [1]+[0]*targetfor i in range(1,target+1):ans = 0for x in nums:if x<= i:ans+=dp[i-x]dp[i] = ansreturn dp[target] 
http://www.dtcms.com/wzjs/253764.html

相关文章:

  • 深圳官网网站建设域名whois查询
  • 哪家公司提供专业的网站建设免费seo网站自动推广软件
  • 深圳建网站信科网站如何优化推广
  • 家居网站建设如何上海专业的seo公司
  • 杭州网站建设蒙特seo和sem是什么
  • 网站建设读书笔记磁力宝
  • 广州科技网络公司排名做网站建设优化的公司排名
  • 做企业网站有什么用如何免费做网站网页
  • 毕业设计代做网站都有哪些seo待遇
  • www.wordpress.org.cn如何刷seo关键词排名
  • 企业网站制作建设深圳网站优化网站
  • 百度蜘蛛网站排名做一个企业网站大概需要多少钱
  • 商城手机网站建设长春seo关键词排名
  • 舟山网站建设设计网站推广线上推广
  • 中恒建设集团有限公司 网站百度站内搜索
  • 顺义网站建设推广优化seo长沙关键词优化首选
  • 云南网站建设的价值seo关键词推广多少钱
  • 做网站搞流量seo搜索引擎优化工具
  • 招聘网站开发手册谈谈你对网络营销的看法
  • 公司网站建设是哪个部门的事情2023第二波疫情已经到来
  • 做视频网站违法么百度快照排名
  • 最好的免费网站空间app推广公司
  • 本地网站建设教程广告推广精准引流
  • 武汉做网站专业建站站长网站优化公司
  • 类似优酷网站建设价格seo优化的优点
  • 网站更新内容怎么做简述在线推广网站的方法
  • 青岛市城乡建设委员会网站搜狗提交入口网址
  • 酒泉做网站seo怎么做优化
  • king 主题WordPress上海站群优化公司
  • 电商 做图 网站有哪些兰州怎么提高网站的排名