问题标题: 酷町堂:4366

0
0
已解决
胡景波
胡景波
中级光能
中级光能

4366   搬砖(rock)

题目描述 Description

考古队发现了一个非常巨大的古墓,具有非常高的考古价值,你随队来到了考古现场。经过紧张的发掘,古墓的墓道终于显露出来,但是它被一块块方砖封住了,现在你的任务就是帮助考古队将这些方砖移走,打通墓道。由于这些保存完好的古代方砖也是珍贵的文物,所以规定一次最多只能搬三块砖。那将这些砖头搬走共有多少种不同的搬法。
例如,现在总共有4个砖头,那么可以选择的方法有以下7种:
1,1,1,1(分4次搬完,每次搬一个砖头)
1,2,1(分3次搬完,第一次搬一个,第二次搬两个,第三次搬一个)
1,1,2(分3次搬完,第一次搬一个,第二次搬一个,第三次搬两个)
2,1,1(分3次搬完,第一次搬两个,第二次搬一个,第三次搬一个)
2,2 (分2次搬完,第一次搬两个,第二次搬两个)
1, 3 (分2次搬完,第一次搬一个,第二次搬三个)
3, 1 (分2次搬完,第一次搬三个,第二次搬一个)

输入描述 Input Description

一个1~40的正整数N,表示共有N块砖头

输出描述 Output Description

一个正整数,表示N块砖头移动的方法数

样例输入 Sample Input

 

4

样例输出 Sample Output

 

7

测试点有毒

#include<iostream>
using namespace std;
int n;
long long sum;
int f(int n){
    if(n==1)
        return 0;
    else if(n==2)
        return 1;
    else 
        return f(n-1)+f(n-2);
}
int main(){
    cin>>n;
    for(int i=1;i<=n+1;i++){
        sum+=f(i);
    }
    cout<<sum;
    return 0;
}

0
已采纳
被禁言 李秉轩
李秉轩
修练者
修练者

int work(int x){
    if(ans[x]!=0)return ans[x];
    if(x==1)return ans[1]=1;
    if(x==2)return ans[2]=2;
    if(x==3)return ans[3]=4;
    return ans[x]=work(x-1)+work(x-2)+work(x-3);

1
我要回答