昨天说了今天去刷下PKU 1000,还真去刷了下,还挺顺利的,居然1Y。表示鼓掌。
详细的研究了下题目后,我们可以发现。0<=a,b<=10。a和b如此之小,以至于我倒一时楞了不懂该何从下手。经过再三的思考,我准备用比较的妥当并具有稳定时空复杂度的算法。对,就是动态规划。
确定了用动态规划来解了,那接下去就是要确定动规方程了。恩,优美的动规方程就要出现了。
我们假设DP[i][j](0<=i,j<=10)的值就是i和j的和。同时我们可以很轻松的推出一个规律i+j=i+(j-1)+1;着说明了什么?没错,就是DP[i][j]=DP[i][j-1]+1;其实写成DP[i][j]=DP[i-1][j]+1也没关系。都一样的,因为此处的DP影响因素i和j是轮换的。但在这题,如果j==0则必须要用后一个方程。知道了动规方程,在考虑下边角情况,那么此题就没多大问题了。
完整的动规方程:
DP[i][j] = 0; (i==0 && j==0)
DP[i][j] = DP[i-1][j]+1; (j==0)
DP[i][j] = DP[i][j-1]+1; (j!=0)
至此,我们完美的解决了这道算做动态规划的入门题目了。
至于源代码的实现,大家可以去刷下PKU 1000去了,照着这个思路,大家可以尝试下喽。我就不贴代码了,很简单的啦。大家应该都懂吧。
大家或许可以从这篇文章中体验到动态规划的优美内涵了吧。
P.S.:建议把本文章看完的人立马联系最近的医院看有没有脑残科去挂号,此病不能耽搁的,要小心!