
背包问题
背包问题
JA_yichao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
YbtOJ 背包问题课堂过关 例3 宝物筛选【二进制拆分】【01背包】
思路 这道题一看是多重背包,直接交T飞。 于是就用二进制拆分把宝物拆分成几个宝物,以空间换时间,然后就变成了01背包。 代码 #include<iostream> #include<cstdio> using namespace std; int n,W,v[1000010],w[1000010],s[1000010],f[1000010]; int a[100010],b[100010],tot; int ans; int main() { cin>>n>&..原创 2021-07-08 19:19:11 · 194 阅读 · 0 评论 -
YbtOJ 背包问题课堂过关 例1 采药问题【DP】【背包】
思路 这道题是01背包模板题, 我们根据题意可以得出动态转移方程 f[j]=max{f[j−w[i]]+v[i]}f[j]=\max \left\{f[j-w[i]]+v[i] \right\}f[j]=max{f[j−w[i]]+v[i]} 需要注意的是,枚举时间的for要倒序,因为正序会使 iii 物品被放多次,不符合01背包要求。 代码 #include<iostream> #include<cstdio> using namespace std; int n,m,w[1..原创 2021-07-08 11:00:05 · 171 阅读 · 0 评论 -
HDU2191 多重背包【单调队列】【DP:背包】
这道题裸多重背包会 TTT 飞,所以我们考虑单调队列优化 首先我们知道价格为XXX只能转换到2X2X2X的状态, 所以我们枚举余数表示一开始的状态 然后设一个yyy表示要把这个商品装几个 那么f[y∗jg+k]f[y∗jg+k]f[y∗jg+k]表示的是当前的最优价值, 又有f[y∗jg+k]−zl∗yf[y∗jg+k]−zl∗yf[y∗jg+k]−zl∗y表示未更新的状态 于是得到动态转移方程 f[y∗jg+k]=max(q[h]+zl∗y)f[y∗jg+k]=max(q[h]+zl∗y)f[y∗jg+.原创 2020-08-10 21:32:27 · 193 阅读 · 0 评论