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

专门做图片是网站网站推广培训

专门做图片是网站,网站推广培训,有没有做头像的网站,廊坊市网站建设文章目录 70.爬楼梯(进阶版)⭐️322. 零钱兑换思路CPP代码总结 279.完全平方数思路CPP代码 70.爬楼梯(进阶版) 卡码网:57. 爬楼梯 文章讲解:70.爬楼梯(进阶版) 本题就是典型了完全背包排列问题,…

文章目录

  • 70.爬楼梯(进阶版)
  • ⭐️322. 零钱兑换
    • 思路
    • CPP代码
    • 总结
  • 279.完全平方数
    • 思路
    • CPP代码

70.爬楼梯(进阶版)

卡码网:57. 爬楼梯

文章讲解:70.爬楼梯(进阶版)
本题就是典型了完全背包排列问题,也没有什么绕弯,比较简单

#include <bits/stdc++.h>
using namespace std;int main () {int m, n;cin >> n >> m;std::vector<int> dp(n + 1, 0);dp[0] = 1;for (int j = 1; j <= n; j++) {for (int i = 0; i <= m; i++) {if (j >= i)dp[j] += dp[j - i]; }}cout << dp[n] << endl;return 0;
}

⭐️322. 零钱兑换

力扣题目链接

文章讲解:322. 零钱兑换

视频讲解:装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换

在这里,我先总结一下之前写过的题目

在518.零钱兑换II中,我们求的是装满这个背包有多少种办法,求的是不强调元素顺序的组合数,递推公式是dp[j]+=dp[j-coins[i]]

在377. 组合总和 Ⅳ中,我们也求的是装满这个背包有多少种方法,但是求的是强调元素顺序的排列数,递推公式也是dp[j]+=dp[j-coins[i]]但是我们的遍历顺序是外层for遍历背包,内层for循环遍历物品

本题中,我们求的是装满这个背包最少用多少件物品

思路

  • 确定dp数组的含义

本题中要装满容量为account的背包,最少的物品。那么很直观我们的dp数组的含义就是装满容量为j的背包,所需要的最少物品数量为dp[j]

  • 递推公式

首先我们放物品应该如何表达?

如果我们要装满一个j-coins(i)容量大背包,所需要的最少物品为dp[j-coins(i)],那我现在要装一个j容量的背包,dp[j]可以有一种取值是dp[j] = dp[j-coins(i)]+1(因为我们在遍历coins[i]),那现在我要求一个装满j容量的最小值,那肯定就是

d p [ j ] = m i n ( d p [ j − c o i n s ( i ) ] + 1 , d p [ j ] ) dp[j] = min(dp[j-coins(i)]+1, dp[j]) dp[j]=min(dp[jcoins(i)]+1,dp[j])

  • 初始化

聊到初始化,我们首先就要像dp[0]等于多少,很明显,根据题目含义,account=0的话,我们什么都不放就可以凑成这个account了。

之前我们把非0下标的值初始成0是为了防止我们在递推公式求的值被初始值覆盖,因为我们之前都是dp=max(...),但是在本题中,我们的递推公式出现的是dp[j]=min(...),所以我们应该把非零下标初始成INT_MAX。这样我们在推导赋值的时候才不会被初始值给覆盖掉

  • 遍历顺序

还记得377. 组合总和 Ⅳ这篇文章遍历顺序部分,我们做了一个小总结,先遍历物品在遍历背包求的是组合数;先遍历背包再遍历物品求的就是排列数。

在本题中,我们求的是最少物品是多少,所以本题和组合排列没什么关系,不影响我们最终要求的最少的元素数量,故本题什么样的遍历顺序都可以。

  • 打印

以输入:coins = [1, 2, 5], amount = 5为例 dp[amount]为最终结果。

CPP代码

// 版本一 先物品,再背包
class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包if (dp[j - coins[i]] != INT_MAX) { // 如果dp[j - coins[i]]是初始值则跳过dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}if (dp[amount] == INT_MAX) return -1;return dp[amount];}
};// 版本二 先背包,再物品
class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for (int i = 1; i <= amount; i++) {  // 遍历背包for (int j = 0; j < coins.size(); j++) { // 遍历物品if (i - coins[j] >= 0 && dp[i - coins[j]] != INT_MAX ) {dp[i] = min(dp[i - coins[j]] + 1, dp[i]);}}}if (dp[amount] == INT_MAX) return -1;return dp[amount];}
};
  • 时间复杂度: O(n * amount),其中 n 为 coins 的长度
  • 空间复杂度: O(amount)

总结

装满背包最少要多少物品 的递推公式要重点关注,再一个就是关于初始值的设定也很有讲究。

279.完全平方数

力扣题目链接

视频讲解:换汤不换药!| LeetCode:279.完全平方数

文章讲解:279.完全平方数

状态:典型的背包问题!真的就是换汤不换药

很明显,我们这里的n就是我们的背包容量,然后物品的重量和价值就是各个完全平方数,题目中要求的是用完全平方数拼凑出n的最小个数,这不就是妥妥的上一题
322.零钱兑换的思路?也就是说求的是装满这个背包所需要的最少物品的数量

思路

  • dp数组的含义

看完上面对题目的论述,本题直接j表示背包容量,dp[j]表示能装满背包所需要的最少物品。

  • 递归函数

跟上一题一样,直接是dp[j] = min(dp[j - i * i] + 1, dp[j])

  • 初始化

dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。

同理,从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j])中可以看出每次dp[j]都要选最小的,所以非0下标的dp[j]一定要初始为最大值INT_MAX,这样dp[j]在递推的时候才不会被初始值覆盖

  • 遍历顺序

与上一题一样,本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!

  • 打印

CPP代码

// 版本一
class Solution {
public:int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);dp[0] = 0;for (int i = 0; i <= n; i++) { // 遍历背包for (int j = 1; j * j <= i; j++) { // 遍历物品dp[i] = min(dp[i - j * j] + 1, dp[i]);}}return dp[n];}
};// 版本二
class Solution {
public:int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);dp[0] = 0;for (int i = 1; i * i <= n; i++) { // 遍历物品for (int j = i * i; j <= n; j++) { // 遍历背包dp[j] = min(dp[j - i * i] + 1, dp[j]);}}return dp[n];}
};
  • 时间复杂度: O(n * √n)
  • 空间复杂度: O(n)
http://www.ds6.com.cn/news/21239.html

相关文章:

  • 阳谷做网站保定百度推广优化排名
  • 淘宝网站建设多少钱网络营销推广工具
  • 浏阳网站建设tvshown深圳优化网站方法
  • pdf动态网站开发网络推广外包搜索手机蛙软件
  • 可以做免费广告的网站有哪些国外网站制作
  • 12306网站开发商运城seo
  • python爬数据做网站爱站长尾关键词挖掘工具
  • 网站设计制作开发公司最有效的15个营销方法
  • 网页设计与网页制作福州整站优化
  • 中国华能集团电子商务平台徐州seo管理
  • 建立网站的目的和意义铜陵seo
  • 淘宝优惠券网站怎么做的小网站搜什么关键词
  • 网站开发入无形资产摊销几年交换友情链接的平台有哪些
  • 手机移动开发网站做app的网站
  • 网页设计免费模板后台兰州seo培训
  • 网站设计经典案例分析山西百度查关键词排名
  • 福建百川建设有限公司网站头条新闻
  • 在家跟狗做网站视频今日百度小说排行榜
  • 燕莎做网站会员制营销
  • 有和wind一样做用网站互动营销公司
  • 网站优化公司排行石家庄网站建设公司
  • 岗网站制作百度宣传推广费用
  • 怎么用mvc架构做网站在线培训网站
  • 教育培训类网站模板fifa最新排名出炉
  • 公司网站建设合同要交印花税吗上海网络推广软件
  • 交换广告是两个网站做友情链接吗广州seo技术外包公司
  • 单位网站建设seo流程
  • 怎样申请一个网站佛山seo
  • 网站建设 日志百度关键词优化软件网站
  • 深圳价格实惠的网站建设公司如何优化网页