Programação dinâmica - Número de combinações distintas para atingir uma determinada pontuação
Considere um jogo em que um jogador pode marcar 3, 5 ou 10 pontos em uma jogada. Dada uma pontuação total n, encontre o número de combinações 'distintas' para atingir a pontuação fornecida.
Meu código:
#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;
}
Para a entrada 11, estou obtendo 3 como saída, mas combinações distintas possíveis são apenas 1. (11 = 3 + 3 + 5)
Como modifico o código acima para retornar o número de combinação 'distinta'?