Help me to find error in this code. The recursion tree gives expected result and even sample test case runs fine.
import java.util.*;
class CalvinGame{
public static int game(int phase,int pos,int dp[][],int arr[]){
if(pos < 0 || pos >= arr.length)
return 0;
if(pos == 0)
return arr[pos];
if(dp[phase][pos]!=0)
return dp[phase][pos];
// System.out.println("(" + phase + "," + pos + ")");
int m1=0,m2=0;
if(phase == 0){
m1 = Math.max(game(0,pos+1,dp,arr),game(0,pos+2,dp,arr));
}
if(phase ==0 || phase == 1){
m2 = Math.max(game(1,pos-1,dp,arr),game(1,pos-2,dp,arr));
}
// System.out.println(m1 + ":::" + m2);
dp[phase][pos] = Math.max(m1,m2) + arr[pos] ;
// System.out.println("(" + phase + "," + pos + ")" + "=>" + dp[phase][pos]);
return dp[phase][pos];
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int arr[] = new int[n];
for(int i=0;i<n;i++)
arr[i] = sc.nextInt();
System.out.println(game(0,k-1,new int[2][n],arr) - arr[k-1]);
}
}