题解: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<bits/stdc++.h>
using namespace std;
map<long long,long long>ans;
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。