木块砌墙题目:
用三种木块,搭建k×2n×1的墙,不能翻转、旋转木块(0≤ n≤ 1024 ,1 ≤ k ≤ 5),计算有多少种方案,输出结果对1000000007取模。
图1 木块与墙
该题目是在庞果网(http://hero.pongo.cn/)第一次看到,但是由于该网站的特殊之处,现在看不到了,不过可以在这看到http://tieba.baidu.com/p/2351476089。
在解题之前,首先感谢庞果网的热心网友们的激情讨论,才让我的思路渐渐清晰成熟起来。
- 分析
看到n可以取值1024,即21024,这是一个很庞大的数字,一般不会也不可能计算出该数据再做处理,正常的思路是要想办法减低问题规模,并找出大规模问题与小规模问题之间的关系。该题目可以采用动态规划算法,将原问题递归划分为子问题,依据边界条件计算出子问题的解,然后根据子问题的状态及子问题之间的状态转移关系组合出原问题解。
墙与木块的厚度都为1,则可以只考虑宽度和高度(k×2n),进一步降低思考的难度。假设该问题结果用F(n,k)表示,由题目可知墙的宽度随着n增加1而增加一倍,所以降低n则可以快速降低问题规模。若能够找出最优子结构满足F(n,k) = g(F(n-1,k)); g()为子问题根据状态即状态转移关系合并子问题的策略。

本文通过介绍木块砌墙的题目,探讨如何使用动态规划算法解决大规模问题。通过分析问题规模与子问题之间的关系,定义状态f(n,left,right),并展示边界情况的处理,如n=0时的状态转移与斐波那契数列的关系,以及n=1时的特殊情况。文章最后提及编程实现的细节。"
114122754,10544594,阿里移动推荐算法特征提取实战,"['推荐系统', '特征工程', '机器学习', '数据挖掘', 'Java开发']
1950

被折叠的 条评论
为什么被折叠?



