我的Bytelandian金币问题CodeChef解决方案中的问题是什么?

时间:2019-01-26 19:46:35

标签: recursion dynamic-programming

我的解决方案是超时。有人可以指出原因。先谢谢了 。问题的网址是https://www.codechef.com/problems/COINS

#include<iostream>
using namespace std;
static  long long int s=0;
int coin(long long int n)
{

    if(n<=11)
    {
        s=s+n;
        return n;
    }
coin(n/2)
coin(n/3)
coin(n/4);

}
int main() 
{ 

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long int  x,y;

 while(cin>>x)
 {
    coin(x);
    printf("%lld\n",s);
    s=0;

 }
} 

1 个答案:

答案 0 :(得分:0)

使用上述解决方案中的方法,您将一遍又一遍地重新计算相同的数字。您在注释中提到的<form id="myform"> <input name="user" type="text" value="myvalue"> </form>是一种称为memoization的技术,在此技术中,您要缓存结果,因此对于每个数字,在递归调用map之前,首先要检查是否它已经在您的备注表中,如果是,您可以立即返回结果,而无需一遍又一遍地重新计算。

祝你好运!