【问题标题】:Partition Equal Subset Sum分区相等子集和
【发布时间】:2021-02-20 10:43:32
【问题描述】:

LC:https://leetcode.com/problems/partition-equal-subset-sum/

因此,允许计算 dp[i][j] 的公式,其中如果前 i 个元素的总和为 j 的组合是:

dp[i][j] = dp[i - 1][j - nums[i - 1]] || dp[i - 1][j];

OR 运算符之前的前半部分表示当我们选择第 I 个元素时会发生什么。

我的问题是为什么是j - nums[i - 1] 而不是j - nums[i]

难道我们不应该将当前的 sum(j) 减去第 i 个元素的当前“权重”(nums[i]),看看前 i-1 个元素是否可以相加?

为什么要减去前一个元素的值?

【问题讨论】:

  • 我认为你对j - nums[i] 的看法是正确的(虽然我看不到引用在哪里)
  • 注意代码前的文字描述是正确的Thus, the transition function is dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i]]
  • 很奇怪,因为“错误代码”的解决方案通过 LC...
  • 好的,我看到了不一致的根源。已添加答案

标签: algorithm dynamic-programming


【解决方案1】:

请注意,表包含n+1 行,我们可以在更完整的代码中看到i 索引从1n,所以nums[i-1] 指的是nums[] 中从零开始的项目索引范围0..n-1

   for (int i = 1; i < n+1; i++) {
        for (int j = 1; j < sum+1; j++) {
            dp[i][j] = dp[i-1][j];
            if (j >= nums[i-1]) {
                dp[i][j] = (dp[i][j] || dp[i-1][j-nums[i-1]]);
            }
        }
    }

【讨论】:

  • 好的,所以两个答案都有效,而 j - nums[i - 1] 'style' 只是为了说明他们如何构建矩阵?非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 2013-10-30
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多