------
## 最终结论
```python
def can_partition(nums):
    total_sum = sum(nums)
    if total_sum % 2 != 0:
        return False
    
    target_sum = total_sum // 2
    
    # Dynamic programming initialization
    dp = [False] * (target_sum + 1)
    dp[0] = True  # We can always reach the sum of 0
    
    # Dynamic programming solution
    for num in nums:
        for j in range(target_sum, num - 1, -1):
            if dp[j - num]:
                dp[j] = True
    
    # Check the result
    return dp[target_sum]
```