第7周作业1——背包问题
来源:互联网 发布:林黛玉最后的结局 知乎 编辑:程序博客网 时间:2024/05/17 22:40
#include <iostream>#include <vector>using namespace std;const int MIN=0x80000000;const int N=3; //物品数量const int V=10; //背包容量int f[N+1][V+1];int Package(int *W,int *C,int N,int V);void main(int argc,char *argv[]){ int W[4]={30,14,16,9}; //物品权重 int C[4]={6,3,4,2}; //物品大小 int result=Package(W,C,N,V); if(result>0) { cout<<endl; cout<<"最高价值为:"<<result<<endl; int i=N,j=V; while(i) { if(f[i][j]==(f[i-1][j-C[i]]+W[i])) { cout<<i<<":"<<"w="<<W[i]<<",c="<<C[i]<<endl; j-=C[i]; } i--; } } else cout<<"can not find the opt value"<<endl; return;}int Package(int *W,int *C,int N,int V){ int i,j; memset(f,0,sizeof(f)); //初始化为0 for(i=0;i<=N;i++) /*for(j=1;j<=V;j++) //此步骤是解决是否恰好满足背包容量, f[i][j]=MIN; //若“恰好”满足背包容量,即正好装满背包,则加上此步骤,若不需要“恰好”,则初始化为0 */ for(i=1;i<=N;i++) for(j=C[i];j<=V;j++) { f[i][j]=(f[i-1][j]>f[i-1][j-C[i]]+W[i])?f[i-1][j]:(f[i-1][j-C[i]]+W[i]); } return f[N][V];}
结果:
0 0
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题。
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题。
- 第7周作业1——背包问题
- android ota 升级包制作分析 (3 打包流程)
- fuse的安装与使用
- matlab中sum函数求和
- fork创建子进程和父进程
- 为什么处理有序数组比无序数组快?
- 第7周作业1——背包问题
- POJ Round and Round We Go 大数位乘法
- NSAttributedString 详解
- 从无秘和知乎看中国社交产品的特点
- Android中的缩略图加载-不浪费一点多余的内存
- Leetcode: Integer to Roman
- android ota 升级包制作分析 (4 设计细节)
- 两个kmp hdu 2594 & hdu 2087
- 关于Activity的生命周期及其作用