暑假总结训练(4)

这周做题的时候,遇到了几个背包问题,于是在B站上将所有的背包问题代码实现以及实现过程详细学习了一遍。在上学期的时候,背包问题讲的比较仓促,当时懂得也不是很多,就挺难理解的,这次复习之后,对背包问题有了更深刻的认识,比想象中的要简单许多,状态转移方程不论是一维数组还是二维数组都已经可以轻松应对了。

还有字符串分割等的问题,这次比赛第一题就是这个,但是学的还不是很明白,刷过一道题但是忘记了已经。

P2722 [USACO3.1]总分 Score Inflation - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

很显然这是一道完全背包的问题,在一维数组时,做起来与01背包唯一的不同点只是第二个for循环的枚举方向不一样,二维数组只有状态转移方程的第一个dp里的i不用去减一,仅此而已。这道题就是完全背包,将数据记录之后直接套上状态转移方程即可。解决背包问题的时候大多选用一维数组,二维数组虽然好理解,但是代码实现稍微比一维数组的复杂一点点。

P3078 [USACO13MAR]Poker Hands S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题思路很简单,将数据记录,中间无0的算一个整体,每个整体每次都减去该整体中数字最小的那一个,然后以0为分界线再将数据分成两个整体,继续重复步骤直到所有整体都只剩下一个数字,将这些单个的数字加到一起就可以解决这道题。代码实现也不难,运用递归,递归函数的形参设为左右两边界,每次减去最小的之后递归左右两边界,记录答案输出即可。

这道题还可以使用贪心,这是我想不到的,大佬们认为,这道题可以理解为连锁填坑,一个坑被填,与它相连的坑都会被填,所以,直接将第一个坑填满,答案加坑的深度,看第二个坑,第二个坑小于第一个坑深就直接跳过,因为填第一个的时候第二个就已经被填满了,如果大于第一个,加上两个坑的差值,这个坑还需要再被填几下,答案加上差值,以此类推到最后,输出答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值