- 动态规划:
01背包(每件物品只有1个)
不装:dp[i][j]=dp[i-1][j]
装: dp[i][j]=max(dp[i][j], dp[i-1][j-w[i]]+c[i])
完全背包
不装:dp[i][j]=dp[i-1][j]
装: dp[i][j]=max(dp[i][j],dp[i][j-w[i]]+c[i])
多重背包(拆成多个01背包):
不装:dp[i][j]=dp[i-1][j]
装: dp[i][j]=max(dp[i][j], dp[i-1][j-k*w[i]]+k*c[i])
发方法种类:
01:
eg:数字组合,每个数字之一次
dp[i][j]=dp[i-1][j]
dp[i][j]=dp[i-1][j]+dp[i-1][j-v[i]];
多重:
eg:组成m元,面值不同,每个面值足够多
dp[i][j]=dp[i-1][j]
dp[i][j]=dp[i-1][j]+dp[i][j-v[i]];
- 路径计数