需要有关Rod Cutting with Memoization的帮助

时间:2015-05-26 12:56:29

标签: algorithm dynamic-programming

我在java中使用memoization技术实现了棒切割,这是我到目前为止的代码:

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)。这是代码中需要的吗。我错过了一些没有它的角落?

1 个答案:

答案 0 :(得分:0)

是!

当你考虑i = n(在函数maxProfitRodCutMemo中的for循环中)时会出现你的问题的简单答案,这将导致调用maxProfitRodCutMemo(int [] price,0),这将不会给你一个正确的结果 根据你的代码(因为你没有任何条件来检查它)..