gugube 2023-03-04 14:31 采纳率: 42.9%
浏览 28

数组中数字相加 ,和为m ,用最少的数字个数。数组的每个数字可以取得无限个

数组中数字相加 ,和为m ,用最少的数字个数。数组的每个数字可以取得无限个

  • 写回答

1条回答 默认 最新

  • CodeBytes 2023-03-04 15:12
    关注

    该回答引用ChatGPT

    这是一个经典的动态规划问题,可以使用一个一维数组来记录每个和的最小数字个数。

    具体地,假设数组为nums,要求的和为m,我们定义一个一维数组dp,其中dp[i]表示和为i时所需的最小数字个数。

    接下来,我们可以使用一个循环来遍历从1到m的每一个和。对于每个和i,我们可以使用另一个循环来遍历数组nums中的每个数字j,如果当前数字j小于等于i且dp[i-j]存在(即和为i-j的情况可以被满足),则我们可以更新dp[i]的值为dp[i-j]+1。这里加1是因为我们选择了一个数字j,所以总的数字个数要加1。

    最后,当循环结束后,dp[m]就是所求的结果,即和为m时所需的最小数字个数。

    下面是该问题的具体实现代码:

    
    def min_num_of_nums(nums, m):
        dp = [float('inf')] * (m+1)
        dp[0] = 0
        
        for i in range(1, m+1):
            for j in nums:
                if j <= i and dp[i-j] != float('inf'):
                    dp[i] = min(dp[i], dp[i-j]+1)
                    
        return dp[m]
    
    

    时间复杂度为O(mn),其中n为数组nums的长度。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月4日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表