
背包问题
dreamcyf
这个作者很懒,什么都没留下…
展开
-
第一周分享题(混合背包)
原题链接 一道混合背包模板题,题目如下 题解: 将多重背包采取二进制优化,将三类背包问题分为只有01背包和完全背包,[目的:将时间复杂度从O(NVS)优化到O(NVlogS)] 然后判断背包类型采取不同dp方式 时间复杂度:O(NVlogS) 参考代码如下(有注释) /*********************************************************************/ /**********************************cyf**********原创 2020-07-11 20:29:14 · 198 阅读 · 0 评论 -
混合背包&&分组背包
混合背包 啥是混合背包呢,就是包含01背包,完全背包,多重背包。 有n件物品,背包承重最大为m,w[i]代表重量,v[i]代表价值,s[i]代表种类。 s[i]=-1,可用1次,s[i]=0,可用无限次,s[i]>0,可用s[i]次. 解法:见代码 const int maxn=1e4+5; int n,m,dp[M+1],w[N*S],v[N*S],s[N*S]; int main() { cin>>n>>m; int ant=0,x,y,z; fo原创 2020-07-08 13:39:53 · 206 阅读 · 0 评论 -
二维费用背包
二维费用背包 此时,卷子不但有重量,还有体积,让我们重新定义: n卷子数,x最大承受重量,y最大承受体积 w[i]单张卷子重量,v[i]单张卷子体积,g[i]单张卷子分数 解法:多加一维就可 const int maxn=1e4+5; int n,x,y,w[N+1],v[N+1],g[N+1]; int dp[X+1][Y+1]; int main() { cin>>n>>x>>y; for(int i=1;i<=n;i++) c原创 2020-07-08 13:18:39 · 189 阅读 · 1 评论 -
多重背包
多重背包 背景:n种试卷,每种个数不同,最多c张,背包容量还是m 求最大金额 一.无优化写法 时间复杂度:O(NMC) 方法:看成01背包就好 代码如下 const int maxn=1e4+5; int p[N+1],v[N+1],c[N+1],dp[M+1]; int n,m; int main() { cin>>n>>m; int ant=0; for(int i=1;i<=n;i++) { cin>>p[i]原创 2020-07-08 11:35:16 · 141 阅读 · 0 评论 -
完全背包
完全背包 没想到背包有这么多 那么完全背包是怎么回事呢?同01背包大背景,但海涛拥有n种试卷,每种都有无限多个,求最大奖金 按照01背包的分析思路 当j<p[i],可知此时选不了,dp[i][j]=dp[i-1][j] 当j>=p[i], 此时可以选 可以不选,已知每种卷子无限 dp[i][j]=max(dp[i][j],dp[i][j-p[i]]+v[i]) const int maxn=1e4+5; int dp[105][maxn];//储存最优解 int p[105],v[105];//原创 2020-07-07 09:56:31 · 128 阅读 · 0 评论 -
01背包
先把东西按照理解的写一遍然后再去想应该会更好吧 01背包 为了鼓励海涛小朋友,他的班主任有天让他把考试卷子全带过去,总分数就是给他的奖金数 但是他把卷子找出来后发现,卷子被班主任施了魔法,变得很重很重,每张卷子重量都不一样,由于海涛小朋友平时不爱学习,因此只学了一种魔法,他给他的书包施加了咒语,让书包可以装下重量为m的卷子,超过m了咒语就会失效,海涛小朋友就会得不到奖励,但是他不会算怎样才能让奖金最大,因此他来求助你,假如你没能给出最好方案,他就会认为你把奖金独吞了,他就会来报复你。 现已知他有n张卷子原创 2020-07-06 20:10:08 · 137 阅读 · 0 评论