背包问题模板
来源:互联网 发布:淘宝的返利网 编辑:程序博客网 时间:2024/06/05 11:18
0/1背包模板
for(i=1;i<=n;i++)
for(j=v;j>=w[i];j--)//v为背包容量,w[i]为物品体积,a[i]为物品价值
dp[j]=max(dp[j],dp[j-w[i]]+a[i])
完全背包模板
有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],
价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最
大。
for(i=1;i<=n;i++)
for(j=w[i];j<=v;j++)//v为背包容量,w[i]为物品体积,a[i]为物品价值
dp[j]=max(dp[j],dp[j-w[i]]+a[i])
多重背包模板
1.多重背包可以转化为0/1背包,比如说一个物品有两件吧,只需把它当做两个物品存入即可,不过这种方法易超时
2.第二种方法比较快捷只是有点复杂
void complete(int cost,int weight) { int i; for(i=cost;i<=v;i++) dp[i]=max(dp[i],dp[i-cost]+weight); } void bag01(int cost,int weight) { int i; for(i=v;i>=cost;i--) dp[i]=max(dp[i],dp[i-cost]+weight); }void multiply(int cost,int weight,int amount) { int k; if(cost*amount>=v) complete(cost,weight); else{ k=1; while(k<amount){ bag01(k*cost,k*weight); amount-=k; k+=k; } bag01(cost*amount,weight*amount); } }
阅读全文
0 0
- 部分背包问题模板
- 背包问题模板
- 背包问题_模板
- 简单背包问题模板
- 背包问题标准模板
- 背包问题模板
- 背包问题模板
- 背包问题模板
- 背包问题模板
- 01背包问题模板
- 多重背包问题模板
- 背包问题模板(01背包,完全背包,多重背包)
- 背包问题--0/1背包 【模板】
- 多重背包模板题 背包问题V2
- ACM_模板_背包问题
- 二维背包问题 + 代码模板
- 背包问题总结(模板)
- 多重背包问题(含模板)
- linux内核调试技巧 dump_stack()
- 【PAT】【Advanced Level】1015. Reversible Primes (20)
- android 之sqlite事务
- 抽象代数学习笔记(6)群与子群
- 【Redis笔记】1.简介、安装启动(Ubuntu)
- 背包问题模板
- Glide加载圆形图片
- 自动化测试里的数据驱动和关键字驱动思路的理解
- 4515: 又见背包
- 【R语言学习笔记】二、数据可视化
- hdu 2601 An easy problem
- 算法竞赛入门经典 UVa10340子序列
- ckeditor 粘贴图片,粘贴截图
- [jzoj]3505. 【NOIP2013模拟11.4A组】积木(brick) (排列组合vsDP)