From baa58f150763be19d559c9dfe59b02703bedd2e7 Mon Sep 17 00:00:00 2001
From: FuTau <83931109+FuTau@users.noreply.github.com>
Date: Wed, 2 Apr 2025 13:57:10 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=200494.=E7=9B=AE=E6=A0=87?=
 =?UTF-8?q?=E5=92=8C=20=E4=B8=ADPython=E4=BA=8C=E7=BB=B4DP=E7=89=88?=
 =?UTF-8?q?=E6=9C=AC=E7=8A=B6=E6=80=81=E8=BD=AC=E7=A7=BB=E5=88=A4=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

判断条件使用了nums[i-1]而不是当前处理的元素nums[i]。这导致在处理第i个元素时错误地检查了前一个元素的值,从而导致状态转移错误。

正确的条件应为j >= nums[i],以确保当前元素nums[i]可以被选中。

同时建议可以去除初始化时对0元素的操作,在双重循环中当我们碰到0的时候,dp[i][j]会被加2次,这就与2^(0的个数)相对应了。
---
 "problems/0494.\347\233\256\346\240\207\345\222\214.md" | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git "a/problems/0494.\347\233\256\346\240\207\345\222\214.md" "b/problems/0494.\347\233\256\346\240\207\345\222\214.md"
index a23e1743cb..d9cb4c98bd 100644
--- "a/problems/0494.\347\233\256\346\240\207\345\222\214.md"
+++ "b/problems/0494.\347\233\256\346\240\207\345\222\214.md"
@@ -684,7 +684,7 @@ class Solution:
         for i in range(1, len(nums)):
             for j in range(target_sum + 1):
                 dp[i][j] = dp[i - 1][j]  # 不选取当前元素
-                if j >= nums[i - 1]:
+                if j >= nums[i]:
                     dp[i][j] += dp[i - 1][j - nums[i]]  # 选取当前元素
 
         return dp[len(nums)-1][target_sum]  # 返回达到目标和的方案数