2021-05-16

acm每周总结(背包)

本周主要学习了有关背包问题的内容。其实背包问题本身就是动态规划的一种。
其动态dp方程主要为:
dp[w]=max(dp[w],dp[w-m[q]]+v[q])
背包类型主要有:01背包,完全背包,多重背包。

01背包

根据名称可知,此类背包题表示每种物品只能被选一次,所以称之为01问题(要么选要么不选)。

for(int q=1;q<=m;q++) //v为背包容积;
{for(int w=v;w>=b[q];w–) (!注意从大到小的循环次序)
{ dp[w]=max(dp[w],dp[w-b[q]]+a[q]);} }

完全背包

此类背包问题较01背包而言,改变了每种物品的被选次数,使每种物品可以被多次选择。
for(int q=1;q<=m;q++)
for(int w=b[q];w<=v;w++)(!注意循环顺序)
{dp[w]=max(dp[w],dp[w-b[q]]+a[q]);}

其实,言简意赅的用例子来表示01背包与完全背包的区别就是
5 (物品数量)5(背包体积)
1 2 3 4 5(每种物品所占体积)
5 4 3 2 1(每种物品的价值)
在满足不超过背包体积的情况下,使物品的总价值可以达到最大。
若用01背包做:
总价值为:5+4=9;(每种物品只能选一次)
若用完全背包做:
总价值为:5+5+5+5+5=25;(每种物品可多次选择)

多重背包

其实就是在完全背包的基础上,又限定了每种物品的可以被选的次数。(其实感觉最近做的题中基本上没有遇到过多重背包的问题,所以还不是特别了解)

本周做题总结

本周做的题也是关于背包问题的,总结一下我做过的题:
总结一下我遇到的较为新奇的题型:
一.反推问题(逆向思维)
1.体积为浮点数(vj c题小偷);
2.物品总体积超过背包体积的最小值((vj u题小牛放书架)要满足物品总体积不小与背包体积且满足超出背包的体积最小);
a.若背包体积比较小,循环比较小,可以采用三个循环做
for(int q=m;q<=maxx;q++) //循环背包体
{memset(dp,0,sizeof(dp));
for(int e=1;e<=n;e++)
{for(int w=q;w>=a[e];w–)
{ dp[w]=max(dp[w],dp[w-a[e]]+a[e]);}} if(dp[q]>=m)
{l=dp[q]; break;}}
b.若背包体积比较大,循环比较大,可以采用两个循环,加一个循环做。(算出背包体积所能取到的最大值的dp[maxx],然后附带一个循环找出其中一个符合题意的dp[q])
for(int e=1;e<=n;e++)
{for(int w=maxx;w>=a[e];w–)
{ dp[w]=max(dp[w],dp[w-a[e]]+a[e]);}}
for(int q=minn;q<=maxx;q++) //循环背包体
{if(dp[q]>=m)
{l=dp[q]; break;}}
二.分组背包问题
1.每组只能选一件
数组可为一维
for(int i=1;i<=n;i++)//循环组数
{for(int j=m;j>=1;j–)//保证每组最多选一个
{for(int k=1;k<=j;k++)
{dp[j]=max(dp[j],dp[j-k]+a[i][k]);}}
2.每组至少选一件
数组只能为二维
dp[q][e]表示到q组为止e元可获得的最大价值
for(int q=1;q<=n;q++)//循环组数
{for(int w=1;w<=b[q];w++)
{for(int e=v;e>=a[q][w].a;e–)(!!注意与第一种的区别,第二和第三个循环相反,保证每组至少可以选一个)
{
dp[q][e]=max(dp[q][e],dp[q][e-a[q][w].a]+a[q][w].b);//a[q][w].a体积,a[q][w].b价值
dp[q][e]=max(dp[q][e],dp[q-1][e-a[q][w].a]+a[q][w].b);}
}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值