对于这次的结果就不讲了。
关于本次测试的题目和标程就放在百度网盘里
T1,这是一道很水的筛法求素数的暴力,但是由于没有换行,就暴0了,这告诉我们以后调程序一定要用文件调试。
T2,这是一道强模拟,就是把书填如二维数组,这就不赘述了
T3,这道题是一个裸的多重背包,但是要用二进制拆分,在打代码时不小心想错了,可是样例过了,我就没多想就放在一边了,可是如果是NOIP的话,我就一定知道,因为有大数据调试嘛
接下来重点讲后三题
T4,首先一看是斐波那契数列,但是不知道f[1]是什么,那么我们可以推推
然后我们把一次项和常数分开,就可以发现了
让后我们发现一次项和常数项都是很类似于斐波那契数列的东东,所以我们O(n)求出来,就可以O(1)进行转移找到G[j]的答案了
T5,一看题目,搜索,一看数据还是搜索!可是怎么搜索呢?
首先,这道题不能BFS为啥呢?看下面的样例
首先,这道题是先到C打了一个野怪,然后到E,打了6只,总共就是7只野怪
但是BFS中,要遵循一个条件——不能改图,因为到C后返回时就又回到M就会+1,所以就不可以
那就dfs回溯做
设计状态 f(x, y, h, ans) 表示在 (x, y) 时,剩余 h 体⼒,打过 ans 个怪
直接记忆化搜索即可
但是这有个BUG,看下面样例
在写dfs的时候,会有一个搜索的先后顺序对吧。
假设我们先搜索下面的(S向下)我们就会标记f[4][4][0][4]为1,那我们再走回去,就是得到答案9,但是我们先往上,就可以得到答案8,如果我们先搜索上面(S向上)答案就是上面是8,下面1是9
那么我们怎么做呢?
我们就可以在设一维C表示它是从哪里转移过来的,就可已实现转移了。
但是这为什么是正确的呢?看下面的图示(我们反着从结尾开始推)
这样显然是不漏情况的,同时也会转移到S(起点),就可以肯定是最优解
T6,这一到首先一看就感觉是一个DP。先想想二维DP怎么做,枚举一个i和一个j求出i,j中的数,不难想到,用四个数组:
gl[i]:表示i左边的比i小的数
gr[i]:表示i右边的比i小的数
ml[i]:表示i左边的比i大的数
mr[i]:表示i右边的比i大的数
再求出这些东西后,我们就可以想到,为啥不枚举中间端点呢?(可是为什么我考试的时候就没想到)
这样式子就可以很快的列出来了
但是如何维护上面四个只能,很简单,树状数组(或线段树)