摘要: 题目来源:acwing6 算法1 (单调队列优化) O(NV) 一共是n类物品,背包的容量是m 每类物品的体积为v, 价值为w,个数为s 我们先来回顾一下传统的dp方程 dp[i][j] 表示将前 i 种物品放入容量为 j 的背包中所得到的最大价值 dp[i][j] = max(不放入物品 i,放入 阅读全文
posted @ 2020-11-18 22:16 hnkjdx_react 阅读(67) 评论(0) 推荐(1) 编辑
摘要: 原题链接AcWing5 基本思考框架 思路和多重背包问题I一样,但这题的数据范围变成1000了,非优化写法时间复杂度O(n^3) 接近 1e9必超时。 优化多重背包的优化 首先,我们不能用完全背包的优化思路来优化这个问题,因为每组的物品的个数都不一样,是不能像之前一样推导不优化递推关系的。(详情看下 阅读全文
posted @ 2020-11-18 22:07 hnkjdx_react 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 题目来源:AcWing4 算法: (把多重背包拆成01背包)很香 C++ 代码 #include <bits/stdc++.h> using namespace std; int a[10005],b[10005]; int main() { int t=0,n,m,dp[10005]={ },w, 阅读全文
posted @ 2020-11-18 21:52 hnkjdx_react 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 题目来源:https://www.acwing.com/problem/content/3/ 基本思考框架 C++代码 #include<iostream> using namespace std; const int N = 1010; int f[N][N]; int v[N],w[N]; in 阅读全文
posted @ 2020-11-18 21:13 hnkjdx_react 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题目来源https://www.acwing.com/problem/content/2/ 算法1: 二维数组+动态规划 动态规划知识先导 状态转换方程: 定义f[i][j]:前i个物品,背包容量j下的最优解 (1) 当前背包容量不够(j<w[i]),为前i-1个物品最优解: f[i][j]=f[i 阅读全文
posted @ 2020-11-18 20:56 hnkjdx_react 阅读(74) 评论(0) 推荐(0) 编辑