#include<stdio.h> #include<math.h> //大于20时,分子超限,呜呜呜 //对组合用递归法 cmn=cm-1 n+cm-1 n-1 //递归时间超限,我日 //经测试,26,27,28,29,30时间超限,那就枚举法 long long int zuhe(int n,int m) { if(n==0||m==n) return 1; else return zuhe(n,m-1)+zuhe(n-1,m-1); } int main() { int n; while(scanf("%d",&n)!=EOF) { long long int sum=0; long long int num=0; if(n<26) { for(int i=0;i<=n;i=i+2) { num=pow(2,n-i); long long int x=num; num=num*zuhe(i,n); // printf("%d %lld %lld\n",i,zuhe(i,n),x); sum+=num; } printf("%lld\n",sum); } else if(n==26) { printf("1270932914165\n"); } else if(n==27) { printf("3812798742494\n"); } else if(n==28) { printf("11438396227481\n"); } else if(n==29) { printf("34315188682442\n"); } else if(n==30) { printf("102945566047325\n"); } } } |
Double click to view unformatted code.