01 背包

 

void bag01(int cost,int weight)
{
 for(i=v;i>=cost;i--)
  if(dp[i]<dp[i-cost]+weight)
   dp[i]=dp[i-cost]+weight;
}


完全背包

 

void complete(int cost,int weight)
{
 for(i=cost;i<=v;i++)
  if(dp[i]<dp[i-cost]+weight)
   dp[i]=dp[i-cost]+weight;
}


 

多重背包

 

void multiply(int cost,int weight,int amount)
{
 if(cost*amount>=v)
  complete(cost,weight);
 else{
  k=1;
  while(k<amount){
   bag01(k*cost,k*weight);
   amount-=k;
   k+=k;
  }
  bag01(cost*amount,weight*amount);
 }
}


 

 

相关文章:

  • 2021-08-25
  • 2022-12-23
  • 2022-02-07
  • 2021-11-16
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2021-09-13
  • 2021-05-16
相关资源
相似解决方案