题目描述
有一个数组changes,changes中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,对于一个给定值x,请设计一个高效算法,计算组成这个值的方案数。
给定一个int数组changes,代表所以零钱,同时给定它的大小n,另外给定一个正整数x,请返回组成x的方案数,保证n小于等于100且x小于等于10000。
测试样例:
[5,10,25,1],4,15
返回:6
测试样例:
[5,10,25,1],4,0
返回:1
class Exchange { public: int countWays(vector<int> changes, int n, int x) { // write code here vector<int>dp(x+1,0); dp[0]=1; for(int i=0;i<n;i++) { for(int j=changes[i];j<=x;j++) { dp[j]+=dp[j-changes[i]]; } } return dp[x]; } };