菜鸟BIT程序设计课A题日志第六周

俗话说“行百里者半九十,A八周者半六七”,可能动规(没打成回归的归就好)太烧脑,可能周末杂务多,总之这周劲头就少了几许,甚至感觉水个贴都觉得浪费了宝贵的发呆时间(这会儿头有点晕呢),回想第一周的干劲,可能要到最后一周才能重拾吧。

这四题涉及到了基本的动规(或许还可以有记忆化搜索)、最长公共子序列、单向最短路、背包问题,还真一点不重复,可怜我等菜鸟,一通乱搞,基本还是不懂。

动规的题么,大神们都有点讳莫如深,这儿也只能闲扯几句啦。

第二十一题 切木头

真的是连动规是什么都没搞清楚就上,弄了大半天实在搞不出来,无奈乱逛讨论区,结果在写完之后看到这里http://www.cnblogs.com/brokencode/archive/2011/06/26/2090702.html的一句“将递归和动态规划结合起来,就可以设计一种基于记忆功能的从顶向下的动态规划算法”才知道原味的动规和递归没神马关系,记忆化搜索这种东西更是高级,还是徒手填矩阵在这题里了解的,真是没学会走路就乱飞。

第二十二题 双塔问题

题目看过,搞不懂国王要干神马,再看,又搞不懂拆了旧的双塔,是要盖多少对新的双塔呢,于是一遍又一遍之后,终于知道自己二了。只是,这和动规有神马关系,诶,扫过讨论区,发现最长公共子序列这个词,百度之,正合我意。

第二十三题 穿越矩阵

第一次非rejudge折扣啊,淡定而无奈地泪奔。嗯,开了三个矩阵。

第一个自然是存输入的。

第二个就是DP的矩阵,从后往前DP,看到一个简化穿越最上头和最下方的方法:i为行数,则此格右上方行数为up=(i-1+row)%row; 右下方为down=(i+1)%row;

要输出路径实在是没办法,找到的办法嘛~还行:

第三个矩阵是为了最后找路径的标记矩阵,简而言之,最终可以从左向右找,如果的是-1,则下一步走右上方,如果0,则右前方,如果1,则右下方。这个矩阵是随着DP的生成而生成的——也是从右向左填(最右端一列因为右边不用走了便都是0),如果明白DP的怎么生成这个应该也不难。

交上,除了第一个都wa了…痛苦。最后审题发现“如果对于同一个矩阵有多条不同的费用最小路径,则输出左端行号较小的一条。”这句——想了半天又加上判断条件,终于A了。

第二十四题 投资问题

讨论区有风险,投资须谨慎。

01背包纠结到无语有木有——你懂的。

分组去背包确实轻松了。

 

你可能感兴趣的:(ACM)