题目大意:输入三个数字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;
}