初级守护
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;
}