1.1递推算法

算法理解

从已知条件(通过对问题分析及化简后得出的)出发,逐步推出中间过程,进行若干步可重复性计算,逐步推出中间步骤和结果
分为以下两种:
1.顺推:从已知到问题
2.逆推:从问题到已知
\(\color{green}{关键:找出较小子问题与较大原问题之间的联系,将问题由小到大}\)
顺推:从边界出发,向问题靠拢
逆推:需要边界特判,会访问到重复的过程,需要加记忆化搜索

T1:

\(\color{green}{考虑已知和所求的差别和联系}\),已经求出来的 \(dp[i-1]\)\(dp[i]\) 的区别,多了一个 \(a[i]\)
考虑新的 \(a[i]\)\(dp[i]\) 的联系 于是就大致分为两种情况,不做细说

T2:

\(\color{green}{将球传递的过程其实就非常像一个递推的过程}\),于是设 \(f[i][j]\) 为传到第 i 个人花了 j 次操作的方案数,一个人球可以向两边转移,只需要从两边转移就行了

T3:(T_T)

这里的已知自然是已经求过的划分未知是当前要求的划分,我们考虑这一位如何从上一位转移过来,是多了一位还是n小了,都无法作为突破点,但是我们可以发现当这 \(f[i][j]\) 这一维一定存在每一组数字都有1是,则结果就是 \(f[i][j]\) ,考虑如何推广,若有的不为1怎么办,可以将每一位都减去1,直到有一位为1,此时的方案数在加上有1的结果就是正确答案

ps:2025.1.7补充:

对于上一位如何推导到这一位,为什么要单独考虑是否有1的情况呢?

我们考虑一共有 j 个抽屉,此时我们已经确定有一个抽屉中只放一个苹果了,那么方案数即为 j-1 个抽屉放 i-1 个苹果的方案数

然后如果没有抽屉只放一个苹果应该怎么办呢?我们先在每个抽屉放上一个苹果,然后就转化为了有 j 个抽屉放 i-j 个苹果的方案数

是不是很好理解。

本质上还是分类讨论+转化

T4:(T_T)

\(\color{green}{像这种有具体情境的题,不要去简化,如T2,T4,直接按照情景模拟设就行}\)

T5:

很水的预处理

T6:

很水的贪心

T7:(T_T)

手模后发现其实是一个斐波那契数列,递推它的1个数和长度,然后查询的时候类似于前缀和查询就可

T8:(T_T)

\(\color{green}{找好题中的两个维度是关键}\),一个是数的大小,一个是摆放位置,将一个序列转化为二维矩阵,将题中的限制转化为要求以i为边的矩阵内1的个数,求满足条件的组合个数,只需要进行一个分讨,剥出来的L形中的1的个数即可

T9:(TT_TT)

这个题的递推思想非常的明显,就是从上一个斜度转移过来,注意题面要求从外面的点跳进来再跳出去,考验细节

posted @ 2024-09-02 20:36  daydreamer_zcxnb  阅读(18)  评论(0编辑  收藏  举报