各种背包的简要介绍,及

发布 2021-05-26 21:03:28 阅读 4812

方程。f[i][v]=max

如果理解了01背包,那么完全背包只是它的小小转化,应该不难理解,这样的算法就达到了o(n*v*k)了,但是还是可以优化成o(n*v),伪**:

for i=1..n

for v=0..v

f[v]=max

memset(dp,0,sizeof(dp));

for(i=1;i<=n;i++)

for(j=v;j>=c[i];j++)

dp[j]=max(dp[j],dp[j-c[i]]+w[i]);01背包。

对比。memset(dp,0,sizeof(dp));

for(i=1;i<=n;i++)

for(j=c[i];j<=v;j++)

dp[j]=max(dp[j],dp[j-c[i]]+w[i]);完全背包。

多重背包。什么是多重背包?

例子:有n种物品和一个容量为v的背包。第i种物品最多有n[i]件可用,每件体积是c[i],价值是w[i]。

求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

分析:完全背包没有个数限制,这个就有个数限制,能否用完全背包的思想呢?(是我这句话的意思显然是不能)

背包九讲里的状态方程:

f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i

memset(dp,0,sizeof(dp));

for(i=1;i<=n;i++)

for(k=0;k<=num[i];k++)

for(j=m;j>=c[i]*k;j--)

dp[i][j]=max(dp[i][j],dp[i-1][j-c[i]*k]+w[i]*k);

复杂度m*num[i]*n

二维费用背包。

二维费用就是取一件物品,要付出两种代价,比如:之前我们有个容量v可供消耗,那么,再加一种重量u,即一个背包有了两个属性值,v和u,原来它只有一个属性v,物品有了两个属性,那么对应的每种物品的属性也增加了一种即重量,物品就有了三个属性:大小,重量,价值,那么要得到一个物品的价值就要同时花费v和u;这就是所谓的二维费用的概念。

首先:还是来看看我们的01背包**。

for(i=1;i<=n;i++)

for(j=v;j>=w[i];j--)

if(dp[j] dp[j]=dp[j-w[i]]+v[i];

其次对比二维费用**。

for(i=1;i<=n;i++)

for(j=v;j>=w[i];j--)容量的循环。

for(k=m;k>=u[i];k--)多加了一层重量的循环。

if(dp[j][k] dp[j][k]=dp[j-w[i]][k-u[i]]+v[i];

酒店餐饮常用的各种单据及使用

1 点菜单 此单一式三联,第一联由收银员交财务,第二联送交后厨,第三联交给客人。2 吧台酒水单 此单一式三联,第一联酒水员留底,第二。联交给收银员,第三联交给客人,3 菜肴更正单 此单主要是应客人要求加减菜肴,与 点。菜单 的使用方法相同。4 酒水商品入库单 此单一式三联,第一联留底,第二联。交给财...

酒店餐饮常用的各种单据及使用

1 点菜单 此单一式三联,第一联由收银员交财务,第二联送交后厨,第三联交给客人。2 吧台酒水单 此单一式三联,第一联酒水员留底,第二联交给收银员,第三联交给客人,3 菜肴更正单 此单主要是应客人要求加减菜肴,与 点菜单 的使用方法相同。4 酒水商品入库单 此单一式三联,第一联留底,第二联交给财务,第...

酒店餐饮常用的各种单据及使用

1 点菜单 此单一式三联,第一联由收银员交财务,第二联送交后厨,第三联交给客人。2 吧台酒水单 此单一式三联,第一联酒水员留底,第二联交给收银员,第三联交给客人,3 菜肴更正单 此单主要是应客人要求加减菜肴,与 点菜单 的使用方法相同。4 酒水商品入库单 此单一式三联,第一联留底,第二联交给财务,第...