zoukankan      html  css  js  c++  java
  • K数和问题

    问题描述

    给定n个不同的正整数(数组num),整数k(k < = n)以及一个目标数字target。在这n个数里面找出k个数,使得这k个数的和等于目标数字,求问有多少种方案?

    解决思路

    该类问题可以使用动态规划求解。

    令dp[i][j][z]表示在数组num的【前i个元素中取j个数和为z】的组合的个数,则可得到以下递推式:

    dp[i][j][z] = dp[i-1][j][z] + dp[i-1][j-1][z-num[i]]

    该递推式的意义是:对于数组中第i个元素,存在两种可能性,1)选取的j个数中包含它;2)选取的j个数中不包含它。对于1),可能的组合情况数目为 dp[i-1][j-1][z-num[i]];对于2)可能的组合情况的数目为  dp[i-1][j][z]  ,二者加起来,即为所有可能的组合的数量。

    另外还注意到,i只与i-1有关,所以我们可以把三维数组降维成二维数组(类似于背包问题中的降维):

    dp[j][z] = dp[j][z] + dp[j-1][z-num[i]]

     编程练习链接:https://leetcode-cn.com/problems/3sum-with-multiplicity/description/

  • 相关阅读:
    2016Wireshark
    移动UI
    Javascript 严格模式详解
    [转]深入浅出JSONP解决ajax跨域问题
    savedev和save的区别
    jquery各版本区别
    Webpack学习笔记(一)
    Html5新特性
    chrome浏览器debug
    bootstrap笔记
  • 原文地址:https://www.cnblogs.com/piaojianxue/p/10146277.html
Copyright © 2011-2022 走看看