package DynamicProgramming; /* * this is an important Algo in which * we have starting and ending of board and we have to reach * we have to count no. of ways * that help to reach end point i.e number by rolling dice * which have 1 to 6 digits Test Case: here target is 10 int n=10; startAlgo(); System.out.println(bpR(0,n)); System.out.println(endAlgo()+"ms"); int[] strg=new int [n+1]; startAlgo(); System.out.println(bpRS(0,n,strg)); System.out.println(endAlgo()+"ms"); startAlgo(); System.out.println(bpIS(0,n,strg)); System.out.println(endAlgo()+"ms"); */ public class BoardPath { public static long startTime; public static long endTime; public static void startAlgo() { startTime = System.currentTimeMillis(); } public static long endAlgo() { endTime = System.currentTimeMillis(); return endTime - startTime; } public static int bpR(int start, int end) { if (start == end) { return 1; } else if (start > end) return 0; int count = 0; for (int dice = 1; dice <= 6; dice++) { count += bpR(start + dice, end); } return count; } public static int bpRS(int curr, int end, int strg[]) { if (curr == end) { return 1; } else if (curr > end) return 0; if (strg[curr] != 0) return strg[curr]; int count = 0; for (int dice = 1; dice <= 6; dice++) { count += bpRS(curr + dice, end, strg); } strg[curr] = count; return count; } public static int bpIS(int curr, int end, int[] strg) { strg[end] = 1; for (int i = end - 1; i >= 0; i--) { int count = 0; for (int dice = 1; dice <= 6 && dice + i < strg.length; dice++) { count += strg[i + dice]; } strg[i] = count; } return strg[0]; } }