1 2
3 8
代码:
#include<stdio.h> __int64 ans[45] = {0, 3, 8}; int n; void f() { int i; for(i = 3; i <= 40; i++) ans[i] = (ans[i-1]+ans[i-2])*2; } int main() { f(); while(scanf("%d", &n) == 1){ printf("%I64d\n", ans[n] ); } }
第一种 深搜(万能的搜索)没提交 肯定超时!!!
#include<stdio.h> __int64 ans; int n; const char a[3] = {'O', 'E', 'F'}; char s[55]; void dfs(int step) { if(step >= n){ ans ++; return; } if(s[step-1] == 'O'){ for(int i = 1; i < 3; i ++){ s[step] = a[i]; dfs(step+1); } } else{ for(int i = 0; i < 3; i ++){ s[step] = a[i]; dfs(step+1); } } } int main() { while(scanf("%d", &n) == 1){ ans = 0; int k = 0; for(int i = 0 ; i < 3; i ++ ){ s[k] = a[i]; dfs(1); } printf("%I64d\n", ans); } }
#include<stdio.h> __int64 ans; int n; void dg(int step, int next, __int64 sum) { if( next == 1&&step == n-1 ){ sum *=2; ans+=sum;} if( next == 2&&step == n-1 ) { sum*=3; ans+=sum;} if(next == 1&&step != n-1 ){ dg(step+1, 2, sum*2); } if( next == 2&&step != n-1 ){ dg(step+1, 1, sum); dg(step+1, 2, sum*2); } } int main() { while(scanf("%d", &n) == 1){ //sum = 1; ans = 0; if(n == 1){ printf("3\n"); continue; } else{ dg(1, 1, 1); dg(1, 2, 2); } printf("%I64d\n", ans); } return 0; }
hdoj 2047 阿牛的EOF牛肉串 【找规律】,布布扣,bubuko.com
原文地址:http://blog.csdn.net/shengweisong/article/details/38128819