0 1背包解题报告 poj3624
来源:互联网 发布:硕鼠 mac 编辑:程序博客网 时间:2024/05/17 20:23
动态规划算法思想:设m[i][j]用来表示从前i项物品中区取出装入体积为j的背包的物品的最大价值。
其中i的范围为0到n,其中j的范围为0到c,程序要寻求的解为m[n][c]。可以分以下三种情况:
①m[0][j]对所有的j的值为0(物品种类为0), m[i][0]对所有的i的值为0(体积为0)
②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i-1][j](不装)和 m[i-1][j-w[i-1]]+v[i](装)
③当前的体积j小于w[i]时,m[i][j]等于m[i-1][j]
(0 1背包 滚动数组)
http://poj.org/problem?id=3624
#include<iostream>using namespace std;const int N=13000;//w[N]表示物品的重量,v[N]表示物品的价值 c表示总容量 int w[N],v[N],m[N],c,n;int main(){ int i,j; while(cin>>n>>c){ for(i=0;i<n;i++) cin>>w[i]>>v[i]; memset(m,0,sizeof(m)); for(i=0;i<n;i++) for(j=c;j>=0;j--){ if(j>=w[i]) m[j]=max(m[j],m[j-w[i]]+v[i]);//滚动数组 } cout<<m[c]<<endl; } return 0;}
m数组是从上到下,从右往左计算的。在计算m(i,j)之前,m[j]里保存的就是是m(i-1,j)的值,而m[j-w]里保存的是m(i-1,j-w)而不是m(i,j-w) --别忘了j是逆序枚举的,此时m(i,j-w)还没有出来。这样,m[j]>?m[j-w]+v实际是把max{f(i-1),f(i-1,j-w)}保存在m[j]中,覆盖掉m[j]原来的m(i-1,j).
采药(0 1背包):http://tyvj.cn/Problem_Show.asp?id=1005
#include<iostream>using namespace std;const int N=1005;//w[N]表示物品的重量,v[N]表示物品的价值 int w[N],v[N],m[N][N],t,n;int main(){ int i,j; cin>>t>>n; for(i=0;i<n;i++) cin>>w[i]>>v[i]; for(i=1;i<=n;i++) for(j=1;j<=t;j++){ m[i][j]=m[i-1][j]; if(j>=w[i-1]) m[i][j]=max(m[i-1][j],m[i-1][j-w[i-1]]+v[i-1]); } cout<<m[n][t]<<endl; //system("pause"); return 0;}
装箱问题:http://tyvj.cn/Problem_Show.asp?id=1016
#include<iostream>#include<cstring>using namespace std;const int N=20005;int c,n,w[35],v[35],m[N]={0};int main(){ cin>>c>>n; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=1;i<=n;i++) for(int j=c;j>=w[i];j--){ m[j]=max(m[j],m[j-w[i]]+w[i]); //cout<<m[j]<<endl; } cout<<c-m[c]<<endl; return 0;}
- 0 1背包解题报告 poj3624
- POJ3624解题报告
- POJ3624 0-1背包问题
- poj3624 0-1背包问题
- POJ3624 0-1 背包问题
- POJ3624--Charm Bracelet--0-1背包
- 1poj3624(01背包)
- 动态规划之0-1背包问题(POJ3624)
- 0-1背包问题(动态规划) 解题报告
- 背包问题 2 完全背包解题报告
- 背包问题 3 多重背包 解题报告
- 0-1背包问题,poj 3624 Charm Bracelet动态规划-解题报告,增加最优路径构建
- poj3624--01背包
- poj3624(背包问题)
- POJ3624 01背包
- poj3624 dp 01背包
- poj3624--01背包
- poj3624(01背包)
- C关键字sizeof
- MongoDB的权限
- sourceinsight 设置技巧
- SQLYog快捷键大全
- C 关键字extern、static
- 0 1背包解题报告 poj3624
- 危险了,世界赖以运行的软件
- System.Text.Encoding 简介
- Effective C++笔记之一:const 、enum、inline 代替#define的小结
- 严格的身份验证
- 国外优秀科研站点
- 冒泡排序
- MFC控件——ListCtrl控件[翻译]
- Java实现二维码QRCode的编码和解码