Хорошо, вот что делает код.
`if (n<0)`
`return 0;`
Если осталось недостаточно шагов, то не учитывайте их. Например, если осталось два шага, но пользователь пытается выполнить три шага, то это не считается возможной комбинацией.
else if (n==0)
return 1;
Если число шагов, оставшихся матчей количество доступных шагов пользователь пытается взять, это возможно сочетание. Итак, верните 1, потому что это возможная комбинация и должна быть добавлена к общему числу допустимых комбинаций.
else if (map[n]>-1)
return map[n];
Вот динамическая программная часть. Предположим, что все значения в массиве имели значение -1. Итак, если число больше, чем -1, оно уже было решено для, поэтому верните общее количество комбинаций из шага номер n вместо его разрешения.
`map[n] = countDP(n-1, map) + countDP(n-2, map) + countDP(n-3, map);`
return map[n]; }
Наконец, эта часть решает код. Количество возможных комбинаций равно количеству возможных комбинаций, которые может получить пользователь, если он принимает 1 шаг + количество возможных комбинаций, которые может получить пользователь, если он принимает 2 шага + количество возможных комбинаций, которые пользователь может получить, если он возьмет три шага.
пример, предположим, что есть 5 шагов
Простой запуск будет выглядеть так:
//The number of solutions from the fifth step
countDp(5) = countDp(4)+countDp(3)+countDp(2);
//Number of solutions from the fourth step
countDP(4) = countDp(3)+countDp(2)+countDp(1);
//Number of solutions from the third step
countDp(3) = countDp(2)+countDp(1)+countDp(0);
//Number of solutions from the second step
countDp(2) = countDp(1)+countDp(0)+countDp(-1);
//Number of solutions from the first step
countDp(1) = countDp(0) + countDp(-1)+countDp(-2);
//Finally, base case
countDp(0) = 1;
countDp(-1)= 0;
countDp(-2)= 0;
countDp(1) = 1+0+0 = 1;
countDp(2) = 1+1+0 = 2; //Dynamic programming: did not have to resolve for countDp(1), instead looked up the value in map[1]
countDp(3) = 2+1+1 = 4; //Dynamic programming, did not have to solve for countDp(1), countDp(2), instead looked up value in map[1] and map[2]
countDp(4) = 4+2+1=7 //Dynamic programming, did not have to solve for CountDp(3),CountDp(2), CountDp(1), just looked them up in map[3],map[2],map[1]
countDp(5)= 2+4+7=13 //Dynamic programming, just used map[4]+map[3]+map[2]
Связанный: http://stackoverflow.com/questions/12255193/count-number-of-possible-paths-up-ladder – arshajii
я сделаю все возможное, с (скрытом) вопрос: 1. Карта является массив 'int'. 2. Он должен быть определен извне, т. Е. Не в этом примере, и должен содержать n + 1 элементов. 3. нет. Если вы хотите, чтобы это ответили, вам нужно добавить 'C' и' C++ 'в теги 4. ... – pstanton