问题标题: 酷町堂:4366 搬砖

0
0
已解决
乔俊驰
乔俊驰
资深守护
资深守护

tle 90

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

哪里错了


0
已采纳
陈曦
陈曦
资深天翼
资深天翼

f[1]=1,f[2]=2,f[3]=4;

f[i]=f[i-1]+f[i-2]+f[i-3];

0
张新杨
张新杨
高级守护
高级守护

加记忆化搜索:f[1010]

张新杨在2021-04-26 19:31:18追加了内容

在函数里加记忆化搜索:a[45][45]

ps:数组初值为-1,当n==f[n][t]时,直接return f[n][t],这样会少一些循环次数

张新杨在2021-04-26 20:55:36追加了内容

好吧,斐波那契数列也能用[doge]

我要回答