[LintCode] k Sum

3817 단어 code
Given n distinct positive integers, integer k (k <= n) and a number target.
Find k numbers where sum is target. Calculate how many solutions there are?
Example
Given [1,2,3,4], k=2, target=5. There are 2 solutions:
[1,4] and [2,3], return 2.
http://www.lintcode.com/en/problem/k-sum/
dp[k][v]는 k개수와 v를 사용한 방안수를 나타낸다. 그러면 새로 추가된 개수 a에 대해 상태 이동 방정식은 다음과 같다.
dp[k][v] += dp[k-1][v-a];
다음은 AC 코드입니다.
 1 class Solution {

 2 public:

 3     /**

 4      * @param A: an integer array.

 5      * @param k: a positive integer (k <= length(A))

 6      * @param target: a integer

 7      * @return an integer

 8      */

 9     

10     int kSum(vector<int> A, int k, int target) {

11         // wirte your code here

12         vector<vector<int> > dp(k + 1, vector<int>(target + 1, 0));

13         dp[0][0] = 1;

14         for (auto a : A) {

15             for (int kk = k; kk > 0; --kk) {

16                 for (int v = target; v >= a; --v) {

17                     dp[kk][v] += dp[kk-1][v - a];

18                 }

19             }

20         }

21         return dp[k][target];

22     }

23 };

좋은 웹페이지 즐겨찾기