代码随想Day45 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

news/2024/7/15 17:34:07 标签: 算法, c++, 图论

70. 爬楼梯 (进阶) 

这道题用完全背包的思路来做就是一个排列数,先背包在物品。dp[i]是爬到第i个台阶最多的方法数。递推公式:dp[i]+=dp[i-j];初始化dp[0]=1,因为dp[0]是整个递推的基础。

详细代码如下:

#include<iostream>
#include<vector>
using namespace std;
void climbStaircase(int n,int m)
{
    vector<int>dp(n+1,0);
    dp[0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(i>=j)dp[i]+=dp[i-j];
        }
    }
    cout<<dp[n];
}
int main()
{
    int n,m;
    cin>>n>>m;
    climbStaircase(n,m);
    return 0;
}

322. 零钱兑换 

dp[i]是容量为i的背包的最小物品数,dp[i]=min(dp[i-coin[j]]+1,dp[i])。

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

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

但是最小个数和顺序无关,因此那种遍历顺序都可以。

详细代码如下:这道题使用先背包后物品

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]&&dp[i-coins[j]]!=INT_MAX)
                dp[i]=min(dp[i],dp[i-coins[j]]+1);
            }
        }
        if(dp[amount]==INT_MAX) return -1;
        return dp[amount];
    }
};

279.完全平方数  

本题 和 322. 零钱兑换 基本是一样的,要注意这里等比于上述题目的coin数组里的值是i*i(1,4,9,16...),明白这一点就能推出这道题的思路,注意这道题不存在凑不成的情况,因为完全平方数里有1这一项。

使用先物品后背包的思路详细代码:

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],dp[j-i*i]+1);
            }
        }
        return dp[n];

    }
};

http://www.niftyadmin.cn/n/5281163.html

相关文章

鸿蒙 - arkTs:状态管理

状态 State&#xff1a; 在声明式UI中&#xff0c;以状态驱动视图更新 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09;视图&#xff08;View&#xff09;&#xff1a;基于UI描述渲染得到的用户界面 使用示例…

WebAssembly 的魅力:高效、安全、跨平台(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

听GPT 讲Rust源代码--src/tools(21)

File: rust/src/tools/miri/src/shims/x86/mod.rs 在Rust的源代码中&#xff0c;rust/src/tools/miri/src/shims/x86/mod.rs文件的作用是为对x86平台的处理提供支持。它包含一些用于模拟硬件操作的shim函数和相关的类型定义。 具体来说&#xff0c;该文件中的函数是通过使用一组…

Vue3选项式API和组合式API详解

前言 相信学习Vue3的人中大多数都是之前使用Vue2开发的&#xff0c;当拿到一个Vue3项目时就接触到了组合式api&#xff0c;但对于组合式api不了解的人第一眼看上去会觉得一头雾水。&#xff1a;“什么玩意&#xff0c;乱七八糟的&#xff0c;选项式api多好&#xff0c;方法变量…

Vue 的两种实现:VSCode 中配置 vue 模板快捷方式的过程

1、创建配置文件&#xff1a; 其一、打开 VSCode &#xff0c;CtrlShiftP, 打开搜索框&#xff1a; 其二、输入&#xff1a;user, 并点击进去 Snippets:Configure User Snippets 其三、输入 vue3js 并回车&#xff1a; 其四、打开项目&#xff0c;发现配置文件 vue3js.code-sn…

为实例方法创建错误的引用(js的问题)

考虑下面代码&#xff1a; var MyObject function() {}MyObject.prototype.whoAmI function() {console.log(this window ? "window" : "MyObj"); };var obj new MyObject(); 现在&#xff0c;为了操作方便&#xff0c;我们创建一个对whoAmI方法的引…

【UML】第10篇 类图(属性、操作和接口)(2/3)

目录 3.3 类的属性&#xff08;Attribute&#xff09; 3.3.1 可见性&#xff08;Visibility&#xff09; 3.3.2 属性的名称 3.3.3 数据类型 3.3.4 初始值 3.3.5 属性字符串 3.4 类的操作&#xff08;Operations&#xff09; 3.4.1 参数表 3.4.2 返回类型 3.5 类的职责…

3. 结构型模式 - 组合模式

亦称&#xff1a; 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 …