2015-05-26 3 views
0

я 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). Это требуется в коде. Я пропустил какой-то угловой корпус без этого?

ответ

0

Да!

Простой ответ на ваш вопрос возникает, когда вы рассматриваете i = n (в цикле for в функции maxProfitRodCutMemo), что приведет к вызову maxProfitRodCutMemo (int [] prices, 0), который не даст вам правильный результат в соответствии с вашим кодом (поскольку у вас нет каких-либо условий для его проверки).

+0

Это не похоже на правильный ответ, поскольку, когда 'maxProfitRodCutMemo (int [] prices, 0),' вызывается, это будет обрабатываться с помощью 'if (memo [n]> = 0)' .Here 'memo [0] равно 0' – function

+0

Ну, не знакомы с java (так как у вас не было никаких тэгов как java), хорошо, что это единственное возможность, когда вам понадобится базовый случай n == 0 ... –

Смежные вопросы