01背包基础-1085 背包问题
2016-09-06 16:22
288 查看
做了好久背包题了,再重新思考一遍01背包发现自己有好多理解错误。
拿这题重新弥补下:
1. 空间优化
2.不优化的情况也一定要明白。后面的基础
外层种类 内层体积,从0到Vmax 注意:有可能当前遍历的体积小于物品体积,则继承之前的数
拿这题重新弥补下:
1. 空间优化
#include <iostream> #include <stdio.h> using namespace std; int dp[10005]; int w[10005]; int v[10005]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&v[i]); for(int i=n;i>=0;i--) for(int j=m;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); cout<<dp[m]<<endl; return 0; }外层种类 内层体积,注意:从最大到V【i】,因为如果从V【i】到最大那么会出现一个物品拿两次的情况
2.不优化的情况也一定要明白。后面的基础
#include <iostream> #include <stdio.h> using namespace std; int dp[101][10010]; int w[101]; int v[101]; int main() { int n,V; cin>>n>>V; for(int i=1;i<=n;i++) { scanf("%d%d",&w[i],&v[i]); } for(int i=1;i<=n;i++) { for(int j=0;j<=V;j++) { if(j>=w[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]); else dp[i][j]=dp[i-1][j]; } } cout<<dp [V]<<endl; return 0; }
外层种类 内层体积,从0到Vmax 注意:有可能当前遍历的体积小于物品体积,则继承之前的数
相关文章推荐
- @OneToMany或@ManyToOne的用法-annotation关系映射篇(上)
- Android中的各种样式的Dialog
- 1528;匹配字符串(平顶山学院)
- chrome jsonView插件安装
- 信息传播
- 网络流各种题型应用及解决方法
- eclipse汉化方法
- JQuery window、document、 body
- 深入AsyncTask
- mac版eclipse 转到windows eclipse后问题
- Learnning Dlib(六) Speeding up Dlib’s Facial Landmark Detector
- caffe中网络结构参数详解
- Java中字符串常量相加
- JAVA基础面试及笔试题
- Nginx初探之二
- 触发器同步
- 支付宝pc端支付接入PHP实现
- swift-sharesdk集成微信、Facebook第三方登录
- 使用栈解决迷宫问题
- libvirt依赖的库