Рассмотрим игру, в которой игрок может набрать 3 или 5 или 10 очков в движении. Учитывая общий балл n, найдите число «отдельных» комбинаций, чтобы достичь заданного балла.Динамическое программирование - Число различных комбинаций для достижения заданной оценка
Мой код:
#include <iostream>
#include<unordered_map>
using namespace std;
unordered_map<int,int> m;
int numOfWays(int n){
if(n==0)
return 1;
if(n<0)
return 0;
if(m[n]>0)
return m[n];
m[n] = numOfWays(n-3)+numOfWays(n-5)+numOfWays(n-10);
return m[n];
}
int main(){
int t;
cin>>t;
cout<<numOfWays(t)<<endl;
return 0;
}
Для ввода 11, я получаю 3 в качестве выходного сигнала, но различных возможных комбинаций только 1. (11 = 3 + 3 + 5)
Как модифицировать над кодом, чтобы вернуть число «отличной» комбинации?
ваш код дает 3 как ANS, потому что рассчитывать (3, 3, 5), (3, 5, 3) и (5, 3, 3) как различные комбинации. – sudoer
Да, я знаю это, но мне нужно учитывать только отдельные комбинации, и я не могу продолжить. –
«Изменение монеты» или «внесение изменений» - это имя, в котором эта проблема часто возникает. Вы найдете много ресурсов в Интернете и в stackoverflow, если будете искать это. –