求所能获得硬币的最大数量.
 Find the maximum coins you can collect by bursting the balloons wisely.
 ans = max(ans, coins);
 return;
 int tmp = nums[i];
 int ans = 0;
 return ans;
 分析最优子结构
 发现,上面的解时错的.因为正向思考的情况下,以选择 1 为例,在点爆 1 气球后,两个左右子问题并不是独立的,所以这给计算子问题带来了障碍,怎么处理才能忽略中间的 1 呢?
 以 [3, 1, 5] 为例,首先拿一个气球,把这个气球当做最后一个气球,然后点爆它.这样就能够将这个气球的左右两个子问题独立开.
 换种方式来说,我们选这1这个气球,然后优先点爆左边和右边的气球之后,再最后点爆这个气嘴,这时可以看出左右两个子问题是独立的,他们只和1这个气球有关联.
 定义状态转移方程
 这种方式仍然是O(n!),但是由于利用了"记忆化"的特性,将重复的子问题写在了内存中,保证每一种子问题只计算一遍.这时能够通过,但是还可以优化.
 return dp[i][j];
 return ans;
 自底向上,所有明确计算粒度:从 i 到 j ,第一次长度是 1 ,第二次长度 2 ,直到长度是 n .
 第一层 循环定义长度 len from 1 to n
 return dp[1][n];