我在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)
。这是代码中需要的吗。我错过了一些没有它的角落?
答案 0 :(得分:0)
是!
当你考虑i = n(在函数maxProfitRodCutMemo中的for循环中)时会出现你的问题的简单答案,这将导致调用maxProfitRodCutMemo(int [] price,0),这将不会给你一个正确的结果 根据你的代码(因为你没有任何条件来检查它)..