模拟,除了首尾两个杯子只接受上一层杯子溢出的一半,其余杯子接受的为上一层两个杯子各自溢出的一半之和。
class Solution {
public:
double champagneTower(int poured, int query_row, int query_glass) {
double dp[110][110];
memset(dp,0,sizeof dp);
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 rem=dp[i][j]-1;
dp[i][j]=1;
dp[i+1][j]+=rem/2;
dp[i+1][j+1]+=rem/2;
}
}
}
return dp[query_row][query_glass];
}
};
时间复杂度:O(query_row^2)
空间复杂度:O(query_row^2)