ACM 周总结报告

上个星期潦草的学习了dp,这个星期也深入的学了dp以及其中的一个分支内容,也就是背包问题,背包问题总的来也是dp的问题,所以关键的还是状态转移方程。在了解了dp的基础上再来理解背包还是很容易的,区别就是背包有一个背包容量的限制,以及题目要求的放进去的物品个数的限制。

那么首先就是如何根据题目列出所对应的dp转移方程了,例如有的题目要求说给定n个物品的价钱和m的钱,问最多能买到的物品数有几种方案。那么就是dp[i][j][k]表示前i个选j个物品价值为k元,题目里要求的未知数有n个物品m块钱,问有多少种方案,那么就用数组表示方案数,其他未知数表示状态数,又例如:

P1057 [NOIP2008 普及组] 传球游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。

由题目看出n个人传了m次问有多少种方案可以传回第一个人手里,由于dp普遍是用记忆化搜索,对答案进行直接查找,所以用dp的数组表示方案数,那么dp[i][j]表示第i个人传了j次,所以这个状态可以是从上一次的左边或者右边传过来的,那么这就可以进行状态转移了,

当然写也都是一些简单的题目,可以直接看出来的,还有些并不是那么容易就看出来的比如

P1156 垃圾陷阱 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2≤D≤100)英尺。

卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。另外,卡门可以通过吃一些垃圾来维持自己的生命。

每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。

假设卡门预先知道了每个垃圾扔下的时间t(0<t≤1000),以及每个垃圾堆放的高度h(1≤h≤25)和吃进该垃圾能维持生命的时间f(1≤f≤30),要求出卡门最早能逃出井外的时间,假设卡门当前体内有足够持续10小时的能量,如果卡门10小时内没有进食,卡门就将饿死,输出一个整表示最早什么时候可以爬出;否则输出卡门最长可以存活多长时间

从题目中我们知道未知量有时间t,高度h,生命时间f,那么既然要求最多的那么用dp[i][j]存储在扔进去i个垃圾,高度为j时的最大生命值以此进行状态转移;

总结:总的来说,这类dp就是以总结为主,多多的总结这类题目的类型,加深对这类题目的理解,那么对这类题目的做法就会简单很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Assault boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值