class Solution:
def lastStoneweight(self, stones: list[int]) -> int:
total = sum(stones) # 计算石头的总重量
n, m = len(stones), total // 2 # 计算石头数量和总重量的一半
dp = [[False] * (m + 1) for _ in range(n + 1)] # 初始化动态规划数组
dp[0][0] = True # 初始状态为True
for i in range(n): # 遍历石头
for j in range(1, m + 1): # 遍历总重量的一半
if j < stones[i]:
dp[i + 1][j] = dp[i][j]
else:
dp[i + 1][j] = dp[i][j] or dp[i][j - stones[i]]
ans = None
for j in range(m, -1, -1): # 从总重量的一半开始逆序遍历
if dp[n][j]: # 找到最大的满足条件的重量
ans = total - 2 * j
break
return ans # 返回结果