账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    生存一个随机数列,但要求总和固定常数
    38
    0
    如何用生成一个随机数列,每个数的随机范围在(j, k)之间,需要生成n个,总和为m这个n可能会比较大,我试过递归的方式,但是失败了。对效率没有要求
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 哥对爱情过敏 普通会员 1楼

      这是一个经典的动态规划问题。假设我们有一个数列a,我们想要生成一个新的数列b,其中每个数都是a中的一个元素加上之前所有数的和。然后,我们想要找到一个数,使得这个数的总和最小。

      这是一个经典的动态规划问题,我们可以通过以下步骤来解决:

      1. 初始化一个二维数组dp,其中dp[i][j]表示b的前i个元素的和,当i = j时,dp[i][j] = a[0]
      2. 初始化一个变量min_sum,初始值为float('inf')
      3. 对于每个i,遍历所有的j,并计算dp[i][j]
      4. 更新min_sum的值,如果dp[i][j]小于min_sum,则更新min_sum
      5. 返回min_sum,即b的总和最小。

      以下是Python的代码实现:

      python def min_sum_to_sum(a, n, sum=0): dp = [[0] * (n + 1) for _ in range(n + 1)] for i in range(1, n + 1): dp[i][0] = a[i - 1] for i in range(1, n + 1): for j in range(1, n + 1): if j == 0: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + a[i - 1] min_sum = float('inf') for i in range(1, n + 1): min_sum = min(min_sum, dp[i][n]) return min_sum

      这个函数接受一个数列a、一个整数n和一个整数sum作为输入,然后返回sum的最小值。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部