私はコードを解決していて、再帰関数は次のようになりました->
int rec(n)
{
if(n>=(n/2+n/3+n/4))
{
return n;
}
else
{
return rec(n/2) + rec(n/3) + rec(n/4);
}
}
この関数の時間の複雑さはどうなるのだろうと思っていましたか?
再帰関係は次のようになると思います-
T(n) = T(n/2) + T(n/3) + T(n/4) + f(n)
この再帰関係をどのように解決しますか? この場合、f(n) の値はどうなるでしょうか?
また、これを動的計画法に変換するにはどうすればよいでしょうか?
これを動的に変換するために私が書いたコードは-
long long rec(long long n)
{
long long c[n]; // The number range is between 1 to 10^9
for(int i=0;i<n;i++)
c[n]=0;
if(n>=(n/2+n/3+n/4))
{
c[n]=n;
return n;
}
else
{
if (c[n]==0)
c[n]=c[n/2]+c[n/3]+c[n/4];
return c[n];
}
}
ただし、再帰を動的に変換した後、私のプログラムは正しい答えを表示することを拒否します。IIはそれを動的計画法に適切に変換していないと思います。それを行う方法を教えてください。
ありがとう