贪婪算法是正向思维,从当前出发,考虑下一步。
动态规划是逆向思维,从结果出发,考虑怎样合理利用前面的步骤。
考虑棋盘问题。M*N的棋盘,当前位置为(x,y),下一位置为(x+1,y+1),(x,y+1)和(x-1,y+1)三者之一。
贪婪算法的思想,是从(x,0)开始到(x,N)。当前位置为(x,y),下一步为(x+1,y+1),(x,y+1)和(x-1,y+1)三者中bonus最大的那个。
动态规划的思想,是从(x,N)逆推到(x,0)。当前位置为(x,y),考虑(x+1,y-1),(x,y-1)和(x-1,y-1)三者中,到当前位置bonus最大的情况。
在每一个贪心算法下面,总是有一个更复杂的动态规划解。