【问题标题】:Every subsequence sum of size 'k'每个大小为“k”的子序列和
【发布时间】:2019-09-09 13:24:48
【问题描述】:

enter image description here鉴于子序列的大小恰好是“k”并且不应该有小于该总和的子序列,如何获得总和最小的子序列数?例如输入 n=4,k=2

1 2 3 4 输出: 1

【问题讨论】:

  • 到目前为止你尝试过什么?您遇到了什么具体问题?
  • 我正在获取大小为 k 和 tgen 的所有子序列,将每个总和存储到一个数组中,然后计算最小子序列,但我得到了运行时错误
  • @Priti "但我收到运行时错误" 什么运行时错误?运行哪个代码?就我们而言(根据问题中提供的信息),没有代码。
  • 使用输入和预期输出创建一个minimal reproducible example
  • @AlgirdasPreidžius 我添加了我的代码图片

标签: c++


【解决方案1】:

动态编程解决方案。

  1. 创建 dp[n][k + 1]。
  2. dp[i][j]:对于 arr a[0...i],任何长度为 k 的子序列的最小可能和。
  3. dp[0][0] = 0, dp[0][1] = a[0], dp[0][i] = INT_MAX for i > 1, dp[i][0] = INT_MAX for i>0.
  4. dp[i][j] = min(dp[i-1][j], dp[i-1][j-1] + a[i]) for i>0 and j>0李>

答案:min(d[0...n-1][k])

O(n^2) 时间和空间解。时间复杂度可以降低到 O(n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2017-05-09
    • 2017-08-15
    相关资源
    最近更新 更多