关于noip的问题

第一个问题真的是水...由于A和B不大于Max Longint (Max Longint = 265,438+过亿),所以可以直接输入A和B,做减法。

第二个问题其实就是输入n,这样就可以算出(2 n-1)% 10000是什么了。因为N=maxlongint,如果直接计算,O(N)会超时,所以采用分治算法,思路很简单,就是:

2 n = (2 n/2) * (2 n/2)。这样一次就能算出2 n/2,第二次相乘就不用再算了。复杂度O(logN),非常快。至于%10000,每次算起来,%10000就够了。

第三个问题是经典的配对动态规范f(i,J),代表A序列第一个I和B序列第一个J配对产生的最小恶心。所以:

F(i,j)=f(i-1,j-1)+abs(v[i]-v[j])(选择)或f(i-1,j)(不选择)。

其中较小的一个。因为j比较小,所以错过的时候不能选择错过的第二序列。

第四个问题是记忆广泛搜索。每找到一个点,如果我现在的消费比它短,我就把我的最低消费值更新到这个点。队列清空后,输出相应的值即可。注意,这个问题不能用动态编程,因为有故意绕道。

第五个问题应该是树形数组。我真的做不到。我们来模拟30分。