я implelmented резки прута с использованием техники запоминания в Java и вот код, который я придумал до сих пор:Нужна помощь по Rod Резка запоминания
public class RodCutMemo {
public static int [] memo;
public static void main(String args [])
{ int [] prices = {0,2,3,5,8,6,4,9,10,12,15,16,17,18,20,22,31,50} ;
int n=5;
memo = new int [n+1];
for(int i =1;i<=n;i++)
{ memo[i]=-9999;}
System.out.println(maxProfitRodCutMemo(prices ,n));
}
public static int maxProfitRodCutMemo(int [] prices,int n)
{ if(memo[n]>=0)
{
return memo[n];}
//else if(n==0)
//{
// return 0;
//}
else
{ int q = -9999;
for(int i =1;i<=n;i++)
{q=Math.max(q,prices[i]+maxProfitRodCutMemo(prices, n-i));}
return q;}}}
У меня есть два вопроса здесь ...
Q1) Я прокомментировал одно из базовых условий. if(n==0)
. Это требуется в коде. Я пропустил какой-то угловой корпус без этого?
Это не похоже на правильный ответ, поскольку, когда 'maxProfitRodCutMemo (int [] prices, 0),' вызывается, это будет обрабатываться с помощью 'if (memo [n]> = 0)' .Here 'memo [0] равно 0' – function
Ну, не знакомы с java (так как у вас не было никаких тэгов как java), хорошо, что это единственное возможность, когда вам понадобится базовый случай n == 0 ... –