import com.sun.jdi.PathSearchingVirtualMachine;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr={1,3,4,6};
System.out.println(ways3(4,2,4,4));
}
public static int ways1(int N,int start,int aim,int k){
return process1(start,k,aim,N);
}
//机器人当前位置为cur,还有rest步要走,共有N个可走的位置,返回 需最终停在aim的方法数
public static int process1(int cur,int rest,int aim,int N){
if(rest==0){//如果已经走完了
return cur==aim?1:0;
}
if(cur==1){
return process1(2,rest-1,aim,N);
}
if(cur==N){
return process1(N-1,rest-1,aim,N);
}
return process1(cur-1,rest-1,aim,N)+ process1(cur+1,rest-1,aim,N);
}
public static int ways2(int N,int start,int aim,int k){
int[][] dp=new int[N+1][k+1];
for(int i=0;i<=N;i++){
for(int j=0;j<=k;j++){
dp[i][j]=-1;
}
}
return process2(start,k,aim,N,dp);
}
public static int process2(int cur,int rest,int aim,int N,int[][] dp){
if(dp[cur][rest]!=-1){
return dp[cur][rest];
}
int ans=0;
if(rest==0){
ans=cur==aim?1:0;
}
if(cur==1){
ans= process2(2,rest-1,aim,N,dp);
}
if(cur==N){
ans= process2(N-1,rest-1,aim,N,dp);
}
ans= process2(cur-1,rest-1,aim,N,dp)+ process2(cur+1,rest-1,aim,N,dp);
dp[cur][rest]=ans;
return ans;
}
public static int ways3(int N,int start,int aim,int k){
int[][] dp=new int[N+1][k+1];
dp[aim][0]=1;
for(int rest=1;rest<=k;rest++){
dp[1][rest]=dp[2][rest-1];
for(int cur=2;cur<N;cur++){
dp[cur][rest]=dp[cur-1][rest-1]+dp[cur+1][rest-1];
}
dp[N][rest]=dp[N-1][rest-1];
}
return dp[start][k];
}
}