functionchange(coins,total){let m = coins.length;let n = total
let res =newArray(m+1).fill(1).map(()=>(newArray(n+1).fill(1)))for(let i=0;i<=n;i++){
res[0][i]=Infinity//为动态规划创造初始条件}for(let i=1;i<=m;i++){
res[i][0]=0//为动态规划创造初始条件}for(let i=1;i<=m;i++){for(let j=1;j<=n;j++){let coin = coins[i-1]if(j>=coin){
res[i][j]= Math.min(res[i-1][j],res[i][j-coin]+1)}else{
res[i][j]= res[i-1][j]}}}return res
}functionfindVslues(res,coins){let p = res.length-1let q = res[0].length-1let ans =[]while(p>0&&q>0){if(res[p][q]==res[p-1][q]){
p--}else{
ans.push(coins[p-1])
q = q-coins[p-1]}}return ans
}let coins =[1,3,4]let total =6let res =change(coins,total)let ans =findVslues(res,coins)
console.log(res)
console.log(ans)
01背包
//0-1背包问题functionBag(capacity,weights,values,n){let res =newArray(n+1).fill(0).map(()=>(newArray(capacity+1).fill(0)));for(let i=1;i<=n;i++){for(let j=1;j<=capacity;j++){if(j<weights[i-1]){
res[i][j]= res[i-1][j]}else{
res[i][j]= Math.max(values[i-1]+res[i-1][j-weights[i-1]],res[i-1][j])}}}return res
}functionfindValues(res,weights,values){let ans =[]let m = res.length-1;let n = res[0].length-1;while(m>0&&n>0){if(res[m][n]===res[m-1][n]){
m--}else{let t ="第"+(m-1)+"个物品"+"重量是"+weights[m-1]+"价值是"+values[m-1]
ans.push(t)
n = n-res[m][n]}}return ans
}const values =[3,4,5],
weights =[2,3,4],
capacity =5,
n = values.length;let res =Bag(capacity,weights,values,n)let ans =findValues(res,weights,values)
console.log(res)
console.log(ans)```
最少硬币找零问题function change(coins,total){ let m = coins.length; let n = total let res = new Array(m+1).fill(1).map(()=>(new Array(n+1).fill(1))) for(let i=0;i<=n;i++){ res[0][i]= Infinity //为动态规划创造初始条件 } for(let i=1;i<