解题思路:
很好理解的模拟动态规划题,对于每个i层j位置的玻璃杯,如果超出了1,它会平均流给i+1层j位置和j+1位置的玻璃杯,这样自上而下把香槟流下去即可,代码如下:
class Solution {
public:
double champagneTower(int poured, int query_row, int query_glass) {
vector<vector<double>> dp(101, vector<double>(101, 0.0));
dp[0][0] = poured;
for(int i = 0; i <= query_row; i ++) {
for(int j = 0; j <= i; j ++) {
if(dp[i][j] >= 1) {
double rest = dp[i][j] - 1;
dp[i][j] = 1;
dp[i + 1][j] += rest / 2;
dp[i + 1][j + 1] += rest / 2;
}
}
}
return dp[query_row][query_glass];
}
};