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