799. Champagne Tower
题解
可以理解为是个模拟题。
创建一个数组,然后把酒全部倒入第一层第一个杯子,即[0][0]。
然后判断[0][0]有没有溢出,有溢出的话,就把溢出的酒倒给下面的两个杯子。
一层层计算,直到计算到我们所需要的层数为止。
返回杯中酒的数量,如果大于1,返回1即可。
代码
class Solution {
public:
double champagneTower(int poured, int query_row, int query_glass) {
vector<vector<double>> f(query_row + 1, vector<double>(query_row + 1, 0));
f[0][0] = poured;
for (int i = 0; i < query_row; i ++) {
for (int j = 0; j <= i; j ++) {
if (f[i][j] > 1) {
double more = f[i][j] - 1;
f[i + 1][j] += more / 2;
f[i + 1][j + 1] += more / 2;
}
}
}
return min(1.0, f[query_row][query_glass]);
}
};