代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)

52.携带研究材料(卡码网)

题目链接

携带研究材料https://kamacoder.com/problempage.php?pid=1052

核心思路

1,确定dp数组及其下标含义

定义一个一维dp数组,下标表示背包大小。

2,确定递推公式

因为完全背包的物品是无限个,所以放完了一个,还能在同一层找。

二维递推公式写法:dp i j = max(dp i - 1 j , dp i j - w\[ i ] + v i )

一维递推公式写法:dp j = max(dp j , dp j - w\[ i ] + v i )

4,初始化数组

全部为0

3,确定循环顺序

因为完全背包物品有无限个,所以遍历背包可以正序遍历,这样正好默认是在同一层

易错点

一维递推公式写法:dp j = max(dp j , dp j - w\[ i ] + v i )

518.零钱兑换||

题目链接

零钱兑换||https://leetcode.cn/problems/coin-change-ii/description/

核心思路

1,定义一维dp数组,dp j 为填满背包大小为 j 的背包的组合数有dp j 种。

2,确定递推公式

因为求的是方法有多少种,所以用累加的形式:

dp j = dp j + dp j - w\[ i ];

表示填满当前背包有两种来源:

不放物品 i ,那么就是dp j

放物品 i ,那么就是dp j - w\[ i ]。

3,初始化dp数组

dp0 = 1;

4,确定遍历方向

先遍历物品,再遍历背包。背包是正序遍历

易错点

1,背包大小要从w i 开始,放不进就默认dp j

2,dp数组的类型为unsigned long long

377.组合总和IV

题目链接

组合总和IVhttps://leetcode.cn/problems/combination-sum-iv/description/

核心思路

1,定义一个一维dp数组,dp j 表示当背包为 j 时,排列数为多少个

2,确定递推公式dp j = dp j + dp j - w\[ i ];

3,初始化dp数组

dp 0 = 0

4,确定遍历顺序

因为求的是排列数,对顺序有要求,那我们就考虑填满每个背包大小的最后一个值是什么。因为每个背包大小都要考虑,所以物品在内层循环。

易错点

1,dp数组的类型为unsigned long long

2,遍历顺序为,背包在外,物品在内

57.爬楼梯(卡码网)

题目链接

爬楼梯(卡码网)https://kamacoder.com/problempage.php?pid=1067

核心思路

1,确定一维dp数组及其下标含义

dp j 表示爬上台阶为 j 总共有 dp j 种方法

2,推导递推公式dp j = dp j + dp j - w\[ i ];

3,初始化数组

dp0 = 0

4,确定遍历顺序

因为是排列数,所以物品放内,背包放外

易错点

1,台阶个数是背包大小,一次可以爬多少个台阶是物品。

2,初始化了台阶个数为0时的方法,所以背包从1开始

3,物品从1开始,小于等于m。

相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven1 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark1 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法