function lastStoneWeight(stones) {
let dp = new Array(15001).fill(0);
let sum = 0;
for (let i = 0; i < stones.length; i++) {
sum += stones[i];
}
let target = Math.floor(sum / 2);
for (let i = 0; i < stones.length; i++) {
for (let j = target; j >= stones[i]; j--) {
dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i])
}
}
return sum - 2 * dp[target];
}