递归解决硬币变化的时间复杂性

时间:2015-02-06 08:16:57

标签: c recursion time-complexity

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;
}

0 个答案:

没有答案