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

滨州正规网站建设价格什么是广告营销

滨州正规网站建设价格,什么是广告营销,杭州培训网站建设,外贸多语言网站建设文章目录前言一、零钱兑换II(力扣518)二、组合总和 Ⅳ(力扣377)三、零钱兑换(力扣322)总结前言 1、零钱兑换II 2、组合总和 Ⅳ 3、零钱兑换 一、零钱兑换II(力扣518) 给你一个整数…

文章目录

  • 前言
  • 一、零钱兑换II(力扣518)
  • 二、组合总和 Ⅳ(力扣377)
  • 三、零钱兑换(力扣322)
  • 总结


前言

1、零钱兑换II
2、组合总和 Ⅳ
3、零钱兑换


一、零钱兑换II(力扣518)

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

假设每一种面额的硬币有无限个。

类似与之前的目标和问题(01背包)求有多少种组合方式

目标和

在这里插入图片描述

分析
题目描述中是凑成总金额的硬币组合数,为什么强调是组合数呢?
例如示例一:
5 = 2 + 2 + 1
5 = 2 + 1 + 2
这是一种组合,都是 2 2 1。
如果问的是排列数,那么上面就是两种排列了。
组合不强调元素之间的顺序,排列强调元素之间的顺序

每个硬币可以重复使用,完全背包问题
整数amount 相当于完全背包问题中的背包容量
组合数:不强调元素之间的顺序
动规五部曲:
1、确定dp数组以及下标的含义
dp[j] :表示总金额为j时有dp[j]种方式
2、确定递推公式
dp[j] += dp[j - coins[i]];
3、dp数组如何初始化
dp[0]一定是1,因为dp[0]是在公式中一切递推结果的起源,如果dp[0]是0的话,递推结果将都是0。
4、确定遍历顺序
外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)===组合数
是否可以颠倒?
不可以

外层for遍历背包(金钱总额),内层for循环遍历物品(钱币) ===排列数

class Solution {public int change(int amount, int[] coins) {int[] dp = new int[amount+1];//初始化 类似于目标和问题dp[0]=1;for(int i = 0; i<coins.length;i++){for(int j=coins[i];j<=amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
}

在这里插入图片描述

二、组合总和 Ⅳ(力扣377)

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
在这里插入图片描述
分析 :
元素可以重复使用 --> 完全背包问题
求排列数 -->遍历顺序 外层循环背包容量 内层循环元素个数

class Solution {public int combinationSum4(int[] nums, int target) {int[] dp = new int[target+1];dp[0]=1;for(int j=0;j<=target;j++){for(int i = 0;i<nums.length;i++){if(j-nums[i]>=0){dp[j] += dp[j-nums[i]]; }}} return dp[target];}
}

在这里插入图片描述

三、零钱兑换(力扣322)

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。
在这里插入图片描述
分析:
每种硬币的数量是无限的,可以看出是典型的完全背包问题。
1、确定dp数组以及下标的含义
dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
2、确定递推公式
凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j]
dp[j] = Math.min(dp[j], dp[j-coins[j]]+1)
3、dp数组初始化
在测试用例中可以发现 dp[0] = 0;
考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。
所以下标非0的元素都是应该是最大值。
4、确定遍历顺序
本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。
所以本题并不强调集合是组合还是排列。

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];int max = Integer.MAX_VALUE;//初始化为最大值for(int i=0;i<dp.length;i++){dp[i] = max;}dp[0] = 0;//遍历for(int i=0;i<coins.length;i++){for(int j=coins[i];j<=amount;j++){if(dp[j-coins[i]]!=max){dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return dp[amount] == max? -1:dp[amount];}
}

在这里插入图片描述


总结

如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品

http://www.wangmingla.cn/news/95933.html

相关文章:

  • 网站建设公司 南宁温州免费建站模板
  • 网站建设大作业选题热搜在哪里可以看
  • 网页模板网站cms网络广告推广平台
  • 做旅游宣传图的网站有哪些如何制作网址链接
  • 微信创建网站应用程序惠州seo整站优化
  • 该怎么给做网站的提页面需求上海十大公关公司排名
  • 建站工具指北成都seo培训班
  • 企业网站建设基本要素网站后台管理系统
  • wordpress更换帝国志鸿优化网下载
  • digging into wordpress上海优化seo排名
  • 平度做网站推广苏州手机关键词优化
  • 九江做网站的公司seo研究中心
  • 三明网站建设客户资源买卖平台
  • 网站做小学一年二班作业怎么做网页设计模板html代码
  • 公司做网站效果怎么样网址怎么弄
  • 网站建设团购矿产网站建设价格
  • 看设计案例的有哪些网站360广告推广平台
  • wordpress所有图片都裁剪seo优化工具哪个好
  • 大气医院网站源码企拓客软件多少钱
  • 怎么查公司网站可信度b2b免费推广网站
  • 汽车之家网页版地址seo关键词优化报价价格
  • 专做毕业设计的网站怎么根据视频链接找到网址
  • 西安到北京防疫政策北京seoqq群
  • 杭州网站建设哪家强seo主要做什么
  • wordpress面邮箱注册seo发包排名软件
  • 网站如何添加认证联盟南宁最新消息今天
  • 桂林北站离阳朔多远如何进行网络营销
  • 双语网站建设报价优化大师有用吗
  • app定制服务公司seo的中文意思
  • 北京网站制作游戏推广公司好做吗