FROM HERE
给定值N,如果我们想要改变N美分,我们就有 每个S = {S1,S2,..,Sm}价值硬币的无限供应,如何 我们可以通过多种方式进行改变?硬币的顺序无关紧要。
例如,对于N = 4和S = {1,2,3},有四种解决方案: {1,1,1,1},{1,1,2},{2,2},{1,3}。因此输出应为4.对于N = 10和S. = {2,5,3,6},有五种解决方案:{2,2,2,2,2},{2,2,3,3},{2,2,6},{2,3 ,5}和{5,5}。所以输出应该是5。
递归解决方案。 (有人可以帮我理解如何计算此解决方案的时间复杂度)
如何解决T(M,N)= T(M,N-1)+ T(M-1,N)
int count( int S[], int m, int n )
{
if (n == 0)
return 1;
if (n < 0)
return 0;
if (m <=0 && n >= 1)
return 0;
return count( S, m - 1, n ) + count( S, m, n-S[m-1] );
}
int main()
{
int i, j;
int arr[] = {1, 2, 3};
int m = sizeof(arr)/sizeof(arr[0]);
printf("%d ", count(arr, m, 4));
getchar(); return 0;
}