题目大意:输入三个数字n(这段代码有n行)r(程序运行一次需要r的时间)p(增加一行输出需要的时间)
思路:记忆化搜索
#include<bits/stdc++.h>
using namespace std;
long long int n,r,p;
long long int f[1000005];
long long int dfs(long long int n)
{
if(n<=1)
return f[0]=0;
if(f[n])
return f[n];
long long int mi=99999999999999;
for(int i=1;i<n;i++)
{
mi=min(mi,(p*i+r+dfs(ceil(1.0*n/(i+1)))));//将n分割成n/(i+1)块,并且取大的那部分
}//找到最优情况
return f[n]=mi;
}
int main()
{
while(cin>>n>>r>>p)
{
memset(f,0,sizeof(f));
cout<<dfs(n)<<endl;
}
return 0;
}
记忆化搜索算法解析
本文介绍了一种使用记忆化搜索解决特定问题的算法实现。该算法通过递归方式分割问题并利用缓存避免重复计算,以此提高效率。适用于求解最小成本路径等问题。
2706

被折叠的 条评论
为什么被折叠?



