ZOJ1629

来源:互联网 发布:中南大学网络考试答案 编辑:程序博客网 时间:2024/05/18 16:54

给图中这样的三角形(这个是n=2的时候)然后给n问有多少个三角形

我们按照向上和向下 分开统计

n          向上           向下

1            1               0

2            4               1

3            10             3

对于向上的三角形,每添加一层,就相当于在原有基础上添加了 n个【以最底下的边为底 高度为1】+f[n-1] 【以最底下边为底,高度从2....n-1】

求出向上的三角形个数之后,我们从前几个可以观察发现,f下[i]=f上[i-1]-f下[i-1]

然后把上下加起来就是总的个数了

#include<bits/stdc++.h>using namespace std;long long ans[600],ans1[600];void preGao(){    int pre[600]={0};    pre[0]=0;    for (int i=1;i<=500;i++)        pre[i]=pre[i-1]+i;    ans[1]=1;    for (int i=2;i<=500;i++)        ans[i]=ans[i-1]+pre[i-1]+i;    ans1[1]=0;    for (int i=1;i<=500;i++)        ans1[i+1]=ans[i]-ans1[i];}int main(){    preGao();    int n;    while (cin>>n)        cout<<ans[n]+ans1[n]<<endl;    return 0;}


0 0
原创粉丝点击