力扣--动态规划完全背包/深度优先08.11.零币

如果暴力的深度优先:
 

class Solution {
    // 定义硬币的面值数组
    int fangx[4] = {25, 10, 5, 1};
    // 计数变量,用于记录配合得到 n 的方法数
    long long count = 0;

    // 定义深度优先搜索函数
    // now: 当前总值
    // n: 目标总值
    // notbig: 上一次选择的硬币面值索引
    int dfs(int now, int n, int notbig) {
        // 当前总值等于目标总值时,方法数加一
        if (now == n) {
            count += 1;
            count %= 1000000007; // 防止计数过大,取模
            return 0;
        }
        // 当前总值大于目标总值时,返回
        if (now > n)
            return 0;
        // 遍历硬币面值数组,从上一次选择的硬币面值索引开始,防止重复计算
        for (int i = notbig; i < 4; i++) {
            // 递归调用深度优先搜索,更新当前总值为当前总值加上当前面值硬币的值
            dfs(now + fangx[i], n, i);
        }
        return 0;
    }

public:
    // 定义计算配合得到 n 的方法数的函数
    int waysToChange(int n) {
        // 调用深度优先搜索函数
        dfs(0, n, 0);
        // 返回计数结果
        return count;
    }
};

但是很不幸,示例(28/30)无法完全通过,还是有点超时了。


那么我们考虑,不限各类硬币数,而且可以看作:面值25的硬币重量是25,价值也是25,这可以视为动态规划里面的完全背包问题,那么就简单了。

class Solution {
    // 定义硬币的面值数组
    int fangx[4] = {1, 5, 10, 25};

public:
    // 计算配合得到 n 的方法数的函数
    int waysToChange(int n) {
        // 定义动态规划数组,长度为 n+1,初始化为0
        vector<int> dp(n + 1, 0);
        // 初始情况:当目标总值为0时,有一种方法,即不选取任何硬币
        dp[0] = 1;

        // 遍历硬币面值数组
        for (int i = 0; i < 4; i++) {
            // 遍历从当前硬币面值到目标总值的所有可能情况
            for (int j = fangx[i]; j <= n; j++) {
                // 更新动态规划数组中第 j 个元素的值
                // 第 j 个元素的值等于第 j 个元素原有的值加上第 j-fangx[i] 个元素的值
                // 即当前面值的硬币可以选择不同数量,对应不同情况下的配合方法数
                dp[j] += dp[j - fangx[i]];
                // 由于涉及大数运算,取模以避免溢出
                dp[j] %= 1000000007;
            }
        }
        // 返回配合得到目标总值 n 的方法数
        return dp[n];
    }
};

相关推荐

  1. 动态规划09-完全背包

    2024-04-09 01:04:01       56 阅读
  2. -动态规划

    2024-04-09 01:04:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 01:04:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 01:04:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 01:04:01       87 阅读
  4. Python语言-面向对象

    2024-04-09 01:04:01       96 阅读

热门阅读

  1. 解密Elbie勒索病毒:应对威胁的有效方法

    2024-04-09 01:04:01       40 阅读
  2. tensorflow2.0知识之模型保存

    2024-04-09 01:04:01       33 阅读
  3. 为什么说基于贫血模型的MVC架构违背OOP

    2024-04-09 01:04:01       35 阅读
  4. HarmonyOS开发的项目运行在ArkUI-X详解

    2024-04-09 01:04:01       28 阅读
  5. 理解Linux中的文件删除、硬链接和软链接

    2024-04-09 01:04:01       42 阅读
  6. 3dmax fbx模型批处理

    2024-04-09 01:04:01       37 阅读
  7. 9.最大极小值与最小极大值[省模拟赛

    2024-04-09 01:04:01       36 阅读
  8. 网络I/O处理

    2024-04-09 01:04:01       32 阅读
  9. kafka命令行高级命令

    2024-04-09 01:04:01       35 阅读