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

力扣-动态规划-518 零钱兑换Ⅱ

思路

  1. dp数组定义:完全背包,不限物品使用次数,使用0-i的硬币,总和小于等于j的组合方式有dp[i][j]个
  2. 递推公式:
    if(j >= coins[i])   
        dp[i][j] = dp[i-1][j] + dp[i][j - coins[i]];
    else
        dp[i][j] = dp[i-1][j];

  3. dp数组初始化:第一行以及第一列初始化为1
  4. 遍历顺序:左右,上下
  5. 时间复杂度:O(m*n)     

代码

class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int m = coins.size();
        vector< vector<unsigned long long>> dp(m, vector<unsigned long long>(amount + 1, 0));

        if(coins[0] <= amount) dp[0][coins[0]] = 1;
        for (int j = coins[0] + 1; j <= amount; j++) {
            dp[0][j] = dp[0][j - coins[0]];
        }

        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }

        for(int i = 1; i < m; i++){
            for(int j = 0; j <= amount; j++){
                if(j >= coins[i])   
                    dp[i][j] = dp[i-1][j] + dp[i][j - coins[i]];
                else
                    dp[i][j] = dp[i-1][j];
            }
        }

        return dp[m-1][amount];
    }
};

相关文章:

  • 笔记一:字符函数和字符串函数
  • gitlab初次登录为什么登不上去
  • 迈向更好的动态图学习:新架构和统一库阅读笔记
  • 获取 ubuntu 系统相关信息
  • C++效率掌握之STL库:string函数全解
  • 由 Mybatis 源码畅谈软件设计(三):简单查询 SQL 执行流程
  • ESP32移植Openharmony外设篇(9)NB-IOT
  • AI岗位面试指南:高频文档问题解析与应答策略
  • 【Java项目】基于Spring Boot的校园博客系统
  • 秒杀系统的常用架构是什么?怎么设计?
  • 理解 Rust 中的共享状态并发
  • 简明systemd服务管理指南:从入门到实战
  • 腾讯云扩容记录
  • 【每日八股】MySQL篇(五):锁
  • vue写一个登录页面
  • [已解决] ModuleNotFoundError: No module named ‘langgraph.checkpoint.sqlite‘
  • 让Word插上AI的翅膀:如何把DeepSeek装进Word
  • 【Groovy】变量和基本数据类型
  • 奖励模型 Reward Models介绍
  • PLC(电力载波通信)网络机制介绍
  • 网站源码下载免费/第一营销网
  • 网站推广一站式服务/公关
  • 主流网站建设服务器有哪些/公司网站推广运营
  • 免费企业网站空间/北京seo服务销售
  • 专门做网站/网络营销论坛
  • 官方网站模板/百度的排名规则详解