Day45|动态规划part07:70. 爬楼梯 (进阶)、322. 零钱兑换、279. 完全平方数

news/2024/10/18 18:13:35/
  1. 爬楼梯(进阶)

之前已经做过这题了,实际上这题可以抽象成一个完全背包问题(只有两种物品,一个1一个2,但是可以无限取),接下来用动规五部曲重新分析一下。

  1. 确定dp数组及其含义

dp[j]表示爬楼梯为j时的爬法。

  1. 确定递推公式

跟之前组合问题总和一样,问的是爬法数量:

dp[j] = dp[j - value[i]],其中value={1,2}

  1. dp数组初始化

dp[0] = 1;

  1. 确定遍历顺序

这是背包里求排列问题,即:1、2 步 和 2、1 步都是上三个台阶,但是这两种方法不一样!

所以需将target放在外循环,将nums放在内循环。

每一步可以走多次,这是完全背包,内循环需要从前向后遍历。

  1. 模拟打印dp数组
class Solution {public int climbStairs(int n) {if(n <= 2){return n;}int dp[] = new int[n + 1];//dp[n]表示到n阶的种数dp[0] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= 2; j++){if(i - j >= 0){dp[i] += dp[i - j];}}}return dp[n];}
}

总结:排列先遍历背包,组合先遍历物品。

322. 零钱兑换

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

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

递推公式:dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);

遍历顺序:不分排列组合,内外顺序无所谓,遍历背包从小到大。

最终代码:

class Solution {public int coinChange(int[] coins, int amount) {//dp[j]表示总金额为j时最少需要多少硬币int dp[] = new int[amount + 1];dp[0] = 0;for(int i = 1; i <= amount; i++){dp[i] = Integer.MAX_VALUE;}for(int i = 0; i < coins.length; i++){for(int j = coins[i]; j <= amount; j++){if(dp[j - coins[i]] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}return (dp[amount] == Integer.MAX_VALUE) ? -1:dp[amount];}
}

279. 完全平方数

跟上面那题一样,还是完全背包,不过换成用i的平方来填背包了:

class Solution {public int numSquares(int n) {int dp[] = new int[n + 1];//dp[i]表示和为i的完全平方数的最小数量。dp[0] = 0;for(int i = 1; i <= n; i++){dp[i] = Integer.MAX_VALUE;}for(int i = 0; i * i <= n; i++){for(int j = i * i; j <= n; j++){if(dp[j - i* i] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j], dp[j - i * i] + 1);}}}return dp[n];}
}
  • 递推公式:dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
  • 遍历顺序:先物品,后背包,从小到大。
  • 初始化:dp[0]=0,其余为最大值。

http://www.ppmy.cn/news/1428950.html

相关文章

广东省道路货物运输资格证照片回执可手机线上办理

广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件&#xff0c;而在办理该证件的过程中&#xff0c;驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及&#xff0c;现在办理驾驶员照片回执已经不再需要亲自前往照相馆&#xff0c;而…

Flutter第九弹 构建列表元素间距

目标&#xff1a; 1&#xff09;Flutter Widget组件之间间距怎么表示&#xff1f; 2&#xff09;列表怎么定义子项之间间距&#xff1f; 一、间距的表示组件 列表组件的间距一般采用固定间距&#xff0c;间距占据可见的空间。 已经使用的表示间距的组件 Spacer&#xff1a…

【QT+QGIS跨平台编译】177:【QGIS_App+Qt跨平台编译】之一(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_App介绍二、QGIS下载三、文件分析四、pro文件一、QGIS_App介绍 QGIS_App是一个基于QGIS的完整的GIS系统库,它不仅可以作为一个独立的GIS应用程序使用,还可以将其各个组件作为二次开发的一部分。QGIS_App具有一个完整的GIS主界面和多个插件(plugins),这些…

geolife笔记/python笔记:trackintel.io.read_geolife

此函数解析 geolife_path 目录中可用的所有 geolife 数据 trackintel.io.read_geolife(geolife_path, print_progressFalse) 参数&#xff1a; geolife_path (str) 包含 geolife 数据的目录路径 print_progress (Bool, 默认为 False)如果设置为 True&#xff0c;则显示每个…

在protobuf里定义描述rpc方法的类型

service UserServiceRpc //在test.proto中定义 { rpc Login(LoginRequest)returns(LoginResponse); rpc GetFriendLists(GetFriendListRequest)returns(GetFriendListResponse); } test.proto文件生成test.pb.cc protoc test.proto --cpp_out./ 将生成的…

CAS Client使用以及执行原理

CAS Client使用以及执行原理 流程介绍 CAS Client是利用Java Web中的Filter进行实现认证功能&#xff0c;客户端对CAS Server的认证流程分为以下步骤&#xff1a; 访问CAS Client服务 由于当前session中未检测到认证信息&#xff0c;会重定向到CAS Server地址进行认证 在CA…

vue的双向数据绑定原理(v2、v3)

说一下子 vue的双向数据绑定是什么 Vue的双向数据绑定&#xff0c;允许开发者在"视图&#xff08;View&#xff09;" 和 "数据模型&#xff08;Model&#xff09;" 之间创建一个实时连接&#xff0c;意味着&#xff1a;当&#xff0c;数据模型&#xff0c…

PPTist在线编辑、播放幻灯片

PPTist简介 “一个基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;支持 文字、图片、形状、线条、图表、表格、视频、音频、公式 几种最常用的元素类型&#xff0c;每一种元素都拥…