第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
原创粉丝点击