摘要:
问题描述: 解法: 这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。 这样就可以对每一组转化为 01背包问题 int dp[110],v[110],w[110]; int main() { int n,m; cin >> n >> m; for (int i = 0;i < 阅读全文
摘要:
问题描述: 解法: 其实只需要在 01背包 的基础上再增加一个纬度代表重量就可以了 因为是在 01背包 的基础上,所以更新的话我们和 01背包一样从大往小更新 int dp[1010][1010]; int main() { int n,m,v; std::cin >> n >> v >> m; f 阅读全文
摘要:
题目链接:https://www.acwing.com/problem/content/7/ 思路: 如果将前面三个背包混合起来,也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),应该怎么求解呢? 01背包与完全背包的混合考虑到 阅读全文
摘要:
题目大意: 这个问题和 01背包 问题很相似,我们也可以依然采取 01背包 的状态定义 dp[i][j] 代表前 i 个物品 容量为 j 的背包的最大价值 那么状态转移方程也就出来了: dp[i][j] = max(dp[i][j],dp[i-1][j-k*v[i]]+w[i]) (k 可以为 0, 阅读全文
摘要:
问题描述: 基本思路: 这个问题和 01背包 问题非常的相似,只是 01背包 问题要求了每个物品我们最多可以选一次(选和不选两种选择),但是完全背包问题只要容量够我们可以无限制的选 如果我们依然采取和 01背包 一样的状态的定义 dp[i][j] 代表 前 i 个物品 容量为 j 的时候的最大价值 阅读全文