SP346题解
这题其实没那么难,不至于评黄。
首先只看题面很容易想到搜索,但使 $10^9$ 搜索太慢了,因此就有许多大佬打起了动态规划,其实可以用记忆化搜索解决,因为动态规划本身其实就是为解决搜索产生重复计算而产生的算法因此大部分动态规划题都可以用记忆化搜索解决。
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+5;
int dp[N]; //记录计算结果
int dfs(int n){
if(dp[n]){
return dp[n];
}
if(n==0){
return 0;
}
return dp[n]=max(n,dfs(n/2)+dfs(n/3)+dfs(n/4));
}
int main(){
int n;
while(cin>>n){
cout<<dfs(n)<<endl;
}
return 0;
}