解题思路:这里其实主要是运用了动态规划,刚刚开始做这些题目的时候,自己对动态规划的思想也是理解的不好,但是做的多了之后,发现了一些规律。很多书上都会提到需要提出一个动态规划方程,那样就更好写程序了,我觉得吧,自己按照自己的理解的方式来也是可以的,不必那么死板。。
这个题目刚刚看到自己想到用树来解决,深度优先算法来解决,但是想想觉得太麻烦,然后看到题目要求,就是要求最大值,想到要不是左边的那个,要不是右边那个值,这样想想好像就有规律了,比如,我们倒过来想,从n个开始,现在比如输入n=5;那么a[4][4]的最大值是不是等于本身加上a[5][4] 和 a[5][5]的最大值(当然这样数组下标是从1开始),接下来,a[3][4] += a[4][4] 和a[4][5]。这样好像就可以解决了。方程好像不就是a[i-1][j]+= Math.max(a[i][j], a[i][j+1]),这样就解决了。
一看就懂的动态规划入门教程
算法-动态规划(1)
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>