问题标题: 酷町堂:4366 搬砖(rock)

0
0
钱卓梁
钱卓梁
初级守护
初级守护

4366   搬砖(rock)

经验值:1600 时间限制:1000毫秒 内存限制:128MB

瑶海区2019年信息学竞赛试题

 不许抄袭,一旦发现,直接清空经验!

题目描述 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次搬完,第一次搬三个,第二次搬一个)

钱卓梁在2022-04-20 13:14:22追加了内容

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<iomanip>
using namespace std;
long long n,a[5]={0,1,2,4};
long long f(long long t,long long n){ 
    long long ans=0;
    if(n==0||n==1) return 1;
    if(n==2) return 2;
    if(n==3) return 4;
    for(long long i=1;i<=3&&a[i]<=n;i++){
        ans+=f(i,n-a[i]);
    }
    return ans;
}
int main(){
    cin>>n;
    cout<<f(1,n);
    return 0;
}


0
我要回答