题目在这里:http://www.matrix67.com/blog/article.asp?id=186
第一题是老题了,到处都有,连Vijos上居然也找到了一个(VOJ1214)。
一个O( sqrt(k) )的方法是先算前面sqrt(k)个值,然后剩下的部分除出来的商会出现大段大段相等的情况(这些商的值从sqrt(k)一直变到0,因此最多有sqrt(k)段),每一段的余数是个等差数列,它们的和可以直接算出来。
第二题,递归问题递归求解。看看样例怎么来的吧,312的右边可以直接确定为314,因为最后一位是2,它的右边就是相同大小的4。312的下边是31的下边,即34。312的左边就是31的左边,而31的左边仍然不能确定(因为1的左边不知道是什么,还需要看它所在的更大的三角形),于是继续递归为3的左边,3的左边是4。这个递归操作完全是多余的,其实只需要从后往前扫描一遍输入的字串就可以了,分别把第一次出现的1、2、3改成4。还有,如果最后一位是4,那就把它改成1、2、3。
第三题当成答案提交类的题目乱搞,可以搜,也可以用带状态压缩的动态规划。
第四题动态规划,F[i,j,k]表示从 i 到 j 这一段,且最底下被涂成了颜色k后所需要的最少次数。
Matrix67原创
转贴请注明出处