zoukankan      html  css  js  c++  java
  • [LintCode] k Sum

    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 };
  • 相关阅读:
    5月27日
    5月26日
    5月25日
    5月24日
    5月22日
    梦断代码(3)
    01团队冲刺
    07周总结
    06周总结
    构建之法阅读笔记
  • 原文地址:https://www.cnblogs.com/easonliu/p/4508185.html
Copyright © 2011-2022 走看看