01背包,完全背包模板
来源:互联网 发布:武汉火凤凰云计算基地 编辑:程序博客网 时间:2024/06/05 18:23
1. 01背包
例:一个旅行者有个最多能装m公斤的背包,现在有n件物品。它们的重量分别为w1,w2,w3,…..wn。它们的价值分别v1,v2,v3,…..vn.求背包能装的最大值。
01背包:
//dp[i][j]表示从0-i这i+1个物品中选不超过j重量的最大值void solve(){ for(i=0;i<n;i++){ for(j<0;j<=m;j++){ if(j<=w[i]){ dp[i+1][j]=dp[i][j]; }else { dp[i+1][j]=max(dp[i][j],dp[i][j-w[i]]+v[i]); } } } cout<<dp[n][m]<<endl;}
2.完全背包
例:一个旅行者有个最多能装m公斤的背包,现在有n种物品。它们的重量分别为w1,w2,w3,…..wn。它们的价值分别v1,v2,v3,…..vn.求背包能装的最大值。每种物品可以挑选多件。
完全背包:
//dp[i][j]表示从前i种挑选不超过j重量的最大值void solve(){ for(i=0;i<n;i++){ for(j<0;j<=m;j++){ if(j<=w[i]){ dp[i+1][j]=dp[i][j]; }else { dp[i+1][j]=max(dp[i][j],dp[i+1][j-w[i]]+v[i]); } } } cout<<dp[n][m];}
3.此外可以通过不断重复一个数组实现01背包和完全背包。
01背包:
设f[v]表示重量不超过V公斤的最大价值。则状态方程:f[v]=max{f[v],f[v-w[i]]+c[i]} 当v>=w[i]且 1<=i<=n时
#include<iostream>#include<string.h>using namespace std;const int maxn=10010;int max(int a,int b){return a>b?a:b;}int w[maxn],v[maxn],dp[maxn];int i,j,m,n;int main(){ cin>>m>>n; //m背包容量,n件物品 int i; for(i=0;i<n;i++){ cin>>w[i]>>v[i]; //每个物品的重量,价值 } for(i=0;i<n;i++){ for(j=m;j>=w[i];j--){ dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } } //dp[m]表示重量不超过m的最大价值. cout<<dp[m]<<endl; //dp[m]为最优解 return 0;}
完全背包:
void solve(){ for(i=0;i<n;i++){ for(j=w[i];j<=m;j++){ dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } } cout<<dp[m]<<endl;}
阅读全文
0 0
- 01背包,完全背包,模板
- 01背包,完全背包模板
- 01背包、完全背包、多重背包模板
- 模板-01背包-完全背包-多重背包
- 01背包、完全背包、多重背包模板
- 01背包+完全背包+多重背包模板
- 01背包 完全背包 多重背包模板
- 01背包模板和完全背包模板
- 背包模板(01背包,完全背包,多重背包)
- 背包问题模板(01背包,完全背包,多重背包)
- 01背包模板、完全背包 and 多重背包(模板)
- 01背包模板、完全背包 and 多重背包(模板)
- 01 完全 多重 背包模板
- 01背包,完全背包,多重背包 ,模板代码
- 01背包、完全背包、多重背包模板代码
- dp 01背包,完全背包,多重背包 模板
- 动态规划之01背包,完全背包,多重背包模板
- 完全背包多重背包模板
- absolute和relative总结
- Add Two Numbers II问题及解法
- HDU 6085 Rikka with Candies(bitset操作+思路转化)
- make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so'
- redis安装及注意事项
- 01背包,完全背包模板
- Burp Intruder使用
- Gentoo添加用户并配置sudo权限
- AI数学基础(2)——数学期望、方差和最小二乘法
- Zookeeper的介绍
- 二分搜索(vector动态输入)
- Hibernate缓存详解
- 自归一化神经网络
- ERP系统是什么