UVA -580 组合数学

  

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ll long long
using namespace std;
ll f[40];
ll g[40];
ll qpow(ll a,ll b){
  ll ans=1;
  while(b){
     if (b&1==1)ans=ans*a;
     a*=a;
     b/=2;
  }
  return ans;
}
void init(){
  f[0]=f[1]=f[2]=0;
  g[0]=1;g[1]=2;g[2]=4;
  for (int i=3;i<=30;i++){
     ll sum=0;
     for(int j=2;j<=i-2;j++){
        sum=sum+g[j-2]*qpow(2,i-j-2);
     }
     f[i]=qpow(2,i-3)+sum;
     g[i]=qpow(2,i)-f[i];
  }
}
int main(){
   init();
  int n;
  while(~scanf("%d",&n)&&n){
    printf("%lld\n",f[n]);
  }
  return 0;
}

 

全部评论

相关推荐

在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务