2025.11.19

45 阅读3分钟

PART 1编程学习 T1洛谷p1044 栈 P1044 [NOIP 2003 普及组] 栈 - 洛谷 一开始的思路:在Sn与Sn-1之间找关系,然而发现并没有明显的递推关系,看题解后发现用到动态规划 状态转移方程dp[x][y]=dp[x+1][y-1]+dp[x-1][y](x代表栈中数字数量 y代表未入栈数字数量) 该方程的意思是当前栈的方法数等于当前栈出栈一个的方法数加上当前栈弹入一个的方法数,将一个大问题转化为很多小问题,精髓在于准确的选取x和y来描述当前的状态,同时x和y也容易描述对栈的操作,除了这一点,边界的选取(初始化)也非常重要,需要尽量找出方法数中特殊的量或者不变的量,比如说当未入栈数字为零时,此时只能将栈中数字按顺序弹出,因此方法数是1。有这个还不够,当栈为空时,此时只能将未入栈的数字弹入栈。于是,我们完成了初始化和状态转移方程,可以开始递推。采用两个循环来遍历x和y。至于为什么一定要两个便捷,其实可以用平面直角坐标系来理解(今天先不写了)。 T2洛谷p1028 数的计算 P1028 [NOIP 2001 普及组] 数的计算 - 洛谷 有了上一题的经验,我想找出两个变量来描述当前状态的同时描述状态的变化,一开始选定串中已有的数和串末的数字,但是如此一来串的变化变得极为抽象,甚至无法确定由哪一状态而来,是因为我没有意识到这个递推不是由固定个数个子状态合成一个当前状态,末尾数字不同,子状态的个数也不同。用x表示此时串中已有的个数,y表示末尾数字,则有dp[x][y]=dp[x-1][1]+dp[x-1][2]+.....+dp[x-1][y/2]但是此时我又发现一个问题,某一状态下的方法数与串上已有的数字数量并无关系,因此x变量可以直接省去。变成一个简单的一维递推。 但是看题解后发现有高手指出:“当 n 为偶数时,递推式是:f[n]=f[n−1]+f[n/2]。接下来就是当 n 等于奇数时了,这个就很好解释了,因为计算机是整除,所以 n/2 等于 n/2−1,所以递推式是:f[n]=f[n−1]。”所以做题的时候要先多思考,放飞思维才能少走弯路。 T3洛谷p1464 function P1464 Function - 洛谷 虽然不是特别会,但是一眼看出来是记忆化搜索,由于abc的范围都非常大,所以我们要先把前两种筛掉(存下来没有意义,并且数组开不了太大,完全没法存),然后再对剩下的进行记忆化搜索,每次得到一组参数,先判断memory数组是否为0,如果为0根据递推公式继续搜,否则直接返回记忆的值,这样保证给定范围内的数基本上只被算一遍。此题算是比较基础的记忆化搜索(当然难的我也不会) PART 2 UNIY学习 1 补习了unity基础知识(现在又有点忘了),六个工作区,生命周期函数等等 2自己上手做了两个UI 其中遇到一些问题,比如对UI没有完全理解,不知道UI的位置固定导致了一系列错误 3第一次用git给队友分享了文件,好麻烦 4对于一些功能比如交互,trigger等等还仅仅是瞧,不能自己动手搓一个出来