解题思路
    按层来递推,摈弃时间的维度,直接想这个杯子一共会有多少酒到这里面

    1. class Solution {
    2. public:
    3. double champagneTower(int poured, int query_row, int query_glass) {
    4. //存的是上层一共流到这一杯子里面多少酒,可能大于1,说明的是它还会向下流
    5. float dp[102][102] = {0};
    6. dp[0][1] = poured;
    7. for(int row = 1; row <= query_row; row++)
    8. {
    9. for(int col = 1; col <= row + 1; col++)
    10. {
    11. float left = (dp[row - 1][col - 1] - 1)/2;//上层的左边
    12. if(left > 0)
    13. dp[row][col] += left;
    14. float right = (dp[row - 1][col] - 1)/2;//上层的右边
    15. if(right > 0)
    16. dp[row][col] += right;
    17. // cout << row << ' ' << col << ' ' << dp[row][col] << endl;
    18. }
    19. }
    20. //return 的最后结果不能大于1
    21. return dp[query_row][query_glass + 1] > 1? 1: dp[query_row][query_glass + 1];
    22. }
    23. };

    第二次写题

    class Solution {
    public:
        double champagneTower(int poured, int query_row, int query_glass) {
            vector<vector<double>> aPoured(query_row + 1, vector<double>(query_row + 1, 0.0));
            aPoured[0][0] = poured;
            for(int i = 1; i <= query_row; i++)
            {
                for(int j = 0; j <= i; j++)
                {
                    aPoured[i][j] = aPoured[i - 1][j] > 1 ? (aPoured[i - 1][j] - 1)/2 : 0;
                    if(j - 1 >= 0)
                        aPoured[i][j] += aPoured[i - 1][j - 1] > 1? (aPoured[i - 1][j - 1] - 1)/2 : 0;
                }
            }
            return aPoured[query_row][query_glass] > 1? 1:aPoured[query_row][query_glass];
        }
    };