考虑一个玩家可以在移动中得分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
是的,我知道它,但我需要只计算不同的组合,我无法继续。 –
“硬币改变”或“改变”是这个问题经常出现的名称。如果你搜索的话,你会在网络上找到大量的资源。 –