2015-05-26 59 views
0

切割我已經在Java中使用記憶化技術implelmented杆切割,這裏是我來了到目前爲止的代碼:需要幫助的羅德與記憶化

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)。這就是code.As需要的。我錯過了一些沒有這個角落的情況?

回答

0

是的!

當你考慮i = n(在函數maxProfitRodCutMemo中的for循環)時,你的問題的簡單答案就會出現,這將導致調用maxProfitRodCutMemo(int []價格,0),它不會給你一個正確的結果 根據你的代碼(因爲你沒有任何條件來檢查它)..

+0

這似乎是正確的答案,因爲,當'maxProfitRodCutMemo(int [] prices,0),'被調用時,它將通過'if(memo [n]> = 0)'處理。'備忘[0]等於0' – function

+0

嗯,不熟悉java(因爲你沒有java標籤),那麼這是唯一的當你可能需要n == 0的基本情況時 –