我在记住N在C ++中选择K时遇到问题,我不需要DP解决方案

时间:2019-12-08 06:38:55

标签: c++ recursion syntax memoization

我正在学习数据结构和算法,我可以递归地解决它,并且我知道我必须添加到备忘录表中以保存重复项,但是这样做很麻烦,一些输入非常有帮助。如果您还可以实现set / map解决方案,那也很好,但是我主要是在寻找数组解决方案以供将来参考。我认为这可能是因为在传递数组时,它不是通过引用传递的,因为c ++不会这样做,所以向量是更好的选择吗?我尝试过,但也无法使其正常工作。而且Java中通过引用传递数组的数组解决方案也不起作用,所以我做错了。

代码:

long long int combinMemo(int n, int k, int memo[])  {
    if (k == 0) return 1;
    if (n == k) return 1;
    if(n < k || (n <= 0)) return 0;
    if(memo[k] == 0) {
        return memo[k] = (combinMemo(n - 1, k - 1, memo)) + combinMemo(n - 1, k, memo);          //+ combinMemo(n - 1, k, memo));
    } else {
        return memo[k];
    }
}

long long int combinMemoWrap(int n, int k) {
    int memo[k + 1];
    for(int i = 0; i < k + 1; i++) {
            memo[i] = 0;
    }
    return combinMemo(n, k, memo);
}

0 个答案:

没有答案