let maxw =
0//最大可放重量
let weight =[2
,2,4
,6,3
]//物品重量
let n = weight.length
let w =
11//揹包最大可承受重量
let men =
for(
let i=
0;i<=n;i++
) men.
push([
])f(
0,0)
//11
function
f(i, cw)
f(i+
1, cw)
//選擇不裝第i個物品
if(cw + weight[i]
<= w)
return maxw
}
//items - 物品重量陣列
//w - 揹包限重f(
[2,2
,4,4
,8,5
],11)
//11f(
[2,2
,4,4
,8,5
],1)
//0f([
2,8,
5],12
)//10
function
f(items, w)
}for
(let i=w;i>=
0;i--
)}
let maxv =
0//最大可放價值
let weight =[2
,2,4
,6,3
]//物品重量
let value=[3
,4,8
,9,6
]//物品價值
let n = weight.length
let w =
11//揹包最大可承受重量
let men =
for(
let i=
0;i<=n;i++
) men.
push([
])f(
0,0,
0)//21
function
f(i, cw, cv)
men[i]
[cw]
= cv
if(cw == w || i == n)
f(i+
1, cw, cv)
//選擇不裝第i個物品
if(cw + weight[i]
<= w)
return maxv
}
//items - 物品重量陣列
//w - 揹包限重f(
[2,2
,4,6
,3],
[3,4
,8,9
,6],
11)//21
function
f(items,values, w)}}
let maxvalue =-1
for(
let i=w;i>=
0;i--
)return maxvalue
}
//items - 商品**
//w - 滿減條件f(
[100,20
,20,30
,30,12
,19,10
,14,16
],200)
//"16 14 10 30 30 100"f(
[2,2
,4,6
,3],
9)//"3 6"f(
[12,22
],100)
//""
function
f(items, w)
for(
let j=
0;j<=
3*w-items[i]
;j++)}
let i //最接近w的值
for(i=w;i<=
3*w;i++)if
(i ==
3*w+1)
return
''//無解
let str =
''for
(let j=n-
1;j>=
1;j--)}
if(i !=
0) str += items[0]
console.
log(str)
}
functionf(
)else
res[i]
[j]= ********[i]
[j]+ min
}}let arr = res[res.length-1]
//所有的路線的集合
let min //集合中的最小值
for(
let v of arr)
return min}f
()//20
動態規劃初識
適合用動態規劃的問題特徵 可以分解成相互重疊的若干子問題 滿足最優性原理 結構性質 該問題的最優解中也包含著其子問題的最優解。一般地,子問題的聯絡體現在某種遞推關係,通過這種遞推計算可以把問題的解儲存起來,後期直接使用,避免重複運算。簡單的dp例子 遞推關係 m i j m i 1 j m i j ...
初識動態規劃
有乙個矩陣map,它每個格仔有乙個權值。從左上角的格仔開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和。給定乙個矩陣map及它的行數n和列數m,請返回最小路徑和。保證行列數均小於等於100.輸入輸出樣例 第一行,輸入n,m表示這個矩陣...
初識動態規劃
動態規劃 dynamic programming 是運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初美國數學家r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問題時,提出了著名的最優化...