codeforces 676B 模拟 递推
题意:每秒从最高处的杯子倒一杯酒下来,酒流的方式如图,问t秒装满酒的杯子的数目。
思路:把第一杯的值设为t,glass[i][j]=(glass[i-1][j-1]-1)/2+(glass[i-1][j])/2,统计值大于等于1的杯数。
#include<cstdio> double glass[12][12]; int main() { int n,t; scanf("%d%d",&n,&t); glass[1][1]=t; for(int i=2;i<=n;i++) { for(int j=1;j<=n;j++) { if(glass[i-1][j-1]>1) glass[i][j]+=(glass[i-1][j-1]-1)/2.0; if(glass[i-1][j]>1) glass[i][j]+=(glass[i-1][j]-1)/2.0; } } int cnt=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(glass[i][j]>=1) cnt++; } } printf("%d\n",cnt); return 0; }