题解:ABC275D - Yet Another Recursive Function

题解:ABC275D - Yet Another Recursive Function

·题目

链接:Atcoder。

链接:洛谷。

·难度

算法难度:普及。

思维难度:入门。

调码难度:入门。

综合评价:简单。

·算法

记忆化深度优先搜索+stl_map。

·思路

用map来记录每一个已经搜索到状态(f(x))的答案,并以此实现记忆化搜索,并通过递归式“f(x)=f(x/2)+f(x/3)(/表示整除,即正常做除法之后再向下取整)”求出答案。

·代价

虽然状态总共有1000000000000000000个状态,但是实际上用到的状态十分稀疏,几乎是log级别的,所以可以卡过。

·细节

状态f(0)可以不记忆化,因为直接返回1就行。

·代码

AC。

#include
using namespace std;
mapans;
long long n=0;
long long f(long long num);
int main(){
    scanf("%lld",&n);
    printf("%lld\n",f(n));
    return 0;
}
long long f(long long num){
    if(num==0){
        return 1;
    }
    if(ans[num]!=0){
        return ans[num];
    }
    long long ret=f(num/2)+f(num/3);
    ans[num]=ret;
    return ret;
}

·注意

①开long long。

你可能感兴趣的:(记忆化搜索,dfs)