Pyramid of Glasses

来源:互联网 发布:windows 组播静态路由 编辑:程序博客网 时间:2024/05/13 12:39
//递推公式,感觉和之前学习的那个三角形很像啊#include <stdio.h>double dp[11][11];//静态数组赋0int main(){    int n,t,count=1;//第一个杯子是1    scanf("%d%d",&n,&t);    dp[1][1]=t;        for(int i=2;i<=n;i++) {//因为第一层已经赋值了,从第二层开始            for(int j=1;j<=i;j++){                if(dp[i-1][j]>1)                dp[i][j]+=(dp[i-1][j]-1)/2;                if(dp[i-1][j-1]>1)                dp[i][j]+=(dp[i-1][j-1]-1)/2;                if(dp[i][j]>=1)                    count++;                            }        }    /*    if(t==0)            printf("0\n");        else            printf("%d\n",count);*/             printf("%d\n",t==0?0:count);//一个很有趣的写法    return 0;} 

一个要找规律的递推公式,首先把杯子假设无限大,把t灌进去然后再一步步推,每个杯子都有两个父亲,一个是【i-1】【j】一个是【i-1】【j-1】。

把两个父亲除以二,但是因为涉及除法所以dp数组要用double。

一开始忘了考虑t为0的情况导致测试点7出错。

在网上看到了一个把输出简化的方法,感觉选择表达式没怎么用过

0 0