From 5440c3d46b16565a265e30e498662829bf40b5e1 Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Tue, 3 May 2022 11:48:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E8=83=8C=E5=8C=85?= =?UTF-8?q?=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=8001=E8=83=8C=E5=8C=85-1.md?= =?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/背包理论基础01背包-1.md | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/problems/背包理论基础01背包-1.md b/problems/背包理论基础01背包-1.md index fe940b4c..257e87e4 100644 --- a/problems/背包理论基础01背包-1.md +++ b/problems/背包理论基础01背包-1.md @@ -423,5 +423,47 @@ function test () { test(); ``` +### TypeScript + +```typescript +function testWeightBagProblem( + weight: number[], + value: number[], + size: number +): number { + /** + * dp[i][j]: 前i个物品,背包容量为j,能获得的最大价值 + * dp[0][*]: u=weight[0],u之前为0,u之后(含u)为value[0] + * dp[*][0]: 0 + * ... + * dp[i][j]: max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]); + */ + const goodsNum: number = weight.length; + const dp: number[][] = new Array(goodsNum) + .fill(0) + .map((_) => new Array(size + 1).fill(0)); + for (let i = weight[0]; i <= size; i++) { + dp[0][i] = value[0]; + } + for (let i = 1; i < goodsNum; i++) { + for (let j = 1; j <= size; j++) { + if (j < weight[i]) { + dp[i][j] = dp[i - 1][j]; + } else { + dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); + } + } + } + return dp[goodsNum - 1][size]; +} +// test +const weight = [1, 3, 4]; +const value = [15, 20, 30]; +const size = 4; +console.log(testWeightBagProblem(weight, value, size)); +``` + + + -----------------------