var integerBreak = function(n) {
//dp[i]表示拆分i能得到的最大乘积
const dp=new Array(n+1).fill(0)
dp[2]=1
for(let i=3
for(let j=1
dp[i]=Math.max(dp[i],dp[i-j]*j,j*(i-j))
}
}
return dp[n]
}
var numTrees = function(n) {
let dp=new Array(n+1).fill(0)
dp[0]=dp[1]=1
for(let i=2
for(let j=1
dp[i]+=dp[j-1]*dp[i-j]
}
}
return dp[n]
}
var canPartition = function(nums) {
let sum=nums.reduce((a,b)=>a+b)
if(sum%2!==0)return false
const dp=new Array(sum/2+1).fill(0)
for(let i=0
for(let j=sum/2
dp[j]=Math.max(dp[j],(dp[j-nums[i]]+nums[i]))
if(dp[j]===sum/2){
return true
}
}
}
return false
}
var lastStoneWeightII = function(stones) {
let sum=stones.reduce((a,b)=>a+b)
let h=Math.floor(sum/2)
const dp=new Array(h+1).fill(0)
for(let i=0
for(let j=h
dp[j]=Math.max(dp[j],dp[j-stones[i]]+stones[i])
}
}
return sum-dp[h]*2
}