lintcode-k数和

2016-06-01  本文已影响396人  鬼谷神奇
//0-1背包
class Solution {
public:
    /**
     * @param A: an integer array.
     * @param k: a positive integer (k <= length(A))
     * @param target: a integer
     * @return an integer
     */
    int kSum(vector<int> A, int k, int target) {
         if(A.size() < k || k == 0)
            return 0;

        int dp[k+1][target+1];
        
        for(int i = 0; i <= k; ++i) {
            for(int j = 0; j <= target; ++j) {
                dp[i][j] = 0;
            }
        }
        
        dp[0][0] = 1;
        
        for(int i = 0; i < A.size(); ++i) {
            for(int j = k; j >= 1; --j) {
                for(int s = target; s >= A[i]; --s) {
                    dp[j][s] = dp[j-1][s-A[i]] + dp[j][s];
                }
            }
        }
        
        return dp[k][target];
    }
};
上一篇 下一篇

猜你喜欢

热点阅读