799. Champagne Tower

题解

可以理解为是个模拟题。
创建一个数组,然后把酒全部倒入第一层第一个杯子,即[0][0]。
然后判断[0][0]有没有溢出,有溢出的话,就把溢出的酒倒给下面的两个杯子。
一层层计算,直到计算到我们所需要的层数为止。
返回杯中酒的数量,如果大于1,返回1即可。

代码

  1. class Solution {
  2. public:
  3. double champagneTower(int poured, int query_row, int query_glass) {
  4. vector<vector<double>> f(query_row + 1, vector<double>(query_row + 1, 0));
  5. f[0][0] = poured;
  6. for (int i = 0; i < query_row; i ++) {
  7. for (int j = 0; j <= i; j ++) {
  8. if (f[i][j] > 1) {
  9. double more = f[i][j] - 1;
  10. f[i + 1][j] += more / 2;
  11. f[i + 1][j + 1] += more / 2;
  12. }
  13. }
  14. }
  15. return min(1.0, f[query_row][query_glass]);
  16. }
  17. };