void ZeroOnePack(int value,int cost)
{
for(int j=m;j>=cost;j--)
dp[j]=max(dp[j],dp[j-cost]+value);
}
void CompletePack(int value,int cost)
{
for(int j=cost;j<=m;j++)
dp[j]=max(dp[j],dp[j-cost]+value);
}
void MutiplePack(int value,int cost,int amount)
{
if(amount*cost>=m)
{
CompletePack(value,cost);
return ;
}
int k=1;
while(k<amount)
{
ZeroOnePack(k*value,k*cost);
amount-=k;
k*=2;
}
ZeroOnePack(amount*value,amount*cost);
return ;
}
背包九讲中的公式
最新推荐文章于 2023-02-16 15:31:16 发布