您的位置:首页 > 科技 > IT业 > 网络推广渠道有哪些及策划思路_网页制作素材大全csdn_百度怎么发帖做推广_搜索引擎营销流程是什么?

网络推广渠道有哪些及策划思路_网页制作素材大全csdn_百度怎么发帖做推广_搜索引擎营销流程是什么?

2024/12/23 10:38:59 来源:https://blog.csdn.net/Ricky_youngone/article/details/142817631  浏览:    关键词:网络推广渠道有哪些及策划思路_网页制作素材大全csdn_百度怎么发帖做推广_搜索引擎营销流程是什么?
网络推广渠道有哪些及策划思路_网页制作素材大全csdn_百度怎么发帖做推广_搜索引擎营销流程是什么?

题目链接:518. 零钱兑换 II - 力扣(LeetCode)

代码如下

class Solution {
public:int change(int amount, vector<int>& coins) {vector<unsigned int> dp(amount + 10, 0);dp[0] = 1;for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包dp[j] += dp[j - coins[i]];}}return dp[amount];}
};

首先来讲一下这个代码的一个需要注意的语法 vector<unsigned int> dp(amount + 10, 0);这个至少对于我来说我是第一次见的,这个作用就是unsigned int, 也就是无符号整型,也就是说范围是在1~2^31-1,  而平常的int其实是signed int的缩写, 所以来说, 这个范围是-2^31-1 ~ 2^31-1这个范围.

题目讲解:首先我们要知道这个题目要求的是有几种方法可以凑成这个amount,也就是我把amount当成一个背包容量,既然说钞票无限使用,我们肯定想到的是用完全背包。这个题目递推公式和之前的(leetcode494:目标和题目)一样的方法推到出来的,然后该初始化了,dp[0] = 1;这个是为了能够递推后面的值,要是初始化为0的话,那么后面的值是无法被覆盖的。

两个for循环颠倒的意义

第一个:先遍历物品再遍历背包(组合数)

for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包

这个求出来的是凑出这个amount的组合数,为什么这么说的,因为先遍历物品,肯定是先遍历1,然后遍历2,所以背包里面的组合就是有顺序的,{1,2}

第二个:先遍历背包再遍历物品(排列数)

for (int j = 0; j <= amount; j++) { // 遍历背包for (int i = 0; i < coins.size(); i++) { // 遍历物品

这个求出来的是凑出这个amount的排列数,因为是把背包定下来的,背包里面放入物品1,2,3.....,所以来说背包里面的物品是没有先后顺序的,所组成的数就是{1,2},{2,1},这两个都能讲的通.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com