NotDeep一直不擅长数据结构,于是找来slowlight帮助他。slowlight于是就从二叉平衡树讲起(纳尼?!):
平衡二叉树(Balanced Binary Tree)具有以下性质的一种树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
讲完了slowlight就给NotDeep出了一道练习题:一棵高度为h的二叉平衡树,它的节点数最少为多少?NotDeep表示依然难得令人发指,于是请你借助编程来帮帮他。
输入
输入数据有多组,每组一行,包括一个整数h (0<= h <= 1000)
输出
对于每个测试实例,要求输出一个答案,即最少的节点数。每个输出占一行。答案可能很大,答案需要对2015取模。
样例输入
1
2
100
样例输出
1
2
360
#include <iostream> #include <stdio.h> using namespace std; int main() { int h[1000]={-1}; int a[1003]; a[1]=1; a[2]=2; int i=3; while(i<=1002) { a[i]=a[i-1]+a[i-2]+1; a[i]=a[i]%2015; i++; } i=0; while((scanf("%d",&h[i]))!=EOF){i++; } i--; int j=0; while(j<=i) { printf("%d\n",a[h[j]]); j++; } return 0; }