当前位置: 首页 > news >正文

力扣-动态规划-494 目标和

思路

  1. dp数组定义:任意装 0 - i 下标的元素,装满容量 j 共有dp [i ,  j ] 种装法
  2. 递推公式:
    for (int i = 1; i < m; i++) {for (int j = 0; j <= cap; j++) {if (nums[i] > j) {dp[i][j] = dp[i - 1][j];} else {dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];}}
    }

    分为两种情况的总和:放第i个物品装满j,和不放第i个物品装满j - nums[i]

  3. dp数组初始化:第一行有恰好放进去,置为1,dp[0][0] 为0,第一列考虑0的个数
  4. 遍历顺序:左向右,上向下
  5. 时间复杂度:     O(n^2)

代码

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for (int n : nums)sum += n;if (( sum + target) % 2 == 1)return 0;int cap = (sum + target) / 2;if(cap < 0) return 0;int m = nums.size();vector< vector<int> > dp(m, vector<int>(cap + 1, 0));if (nums[0] <= cap)dp[0][nums[0]] = 1;dp[0][0] = 1;int numZero = 0;for (int i = 0; i < nums.size(); i++) {if (nums[i] == 0)numZero++;dp[i][0] = (int) pow(2.0, numZero);}for (int i = 1; i < m; i++) {for (int j = 0; j <= cap; j++) {if (nums[i] > j) {dp[i][j] = dp[i - 1][j];} else {dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];}}}return dp[m-1][cap];}
};


http://www.mrgr.cn/news/92449.html

相关文章:

  • ARM Coretex-M核心单片机(STM32)分析hardfault的原因
  • Docker快速使用指南
  • TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手
  • 浅显易懂HashMap的数据结构
  • Ubuntu+deepseek+Dify本地部署
  • Python在实际工作中的运用-通用格式CSV文件自动转换XLSX
  • 基于Kerberos认证对接华为云Elasticsearch
  • JVM 简单内存结构及例子
  • k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
  • 蓝桥杯练习代码
  • 【最大通过数——二分】
  • 机试刷题_NC17 最长回文子串【python】
  • 细说STM32F407单片机RS485收发通信实例及调试方法
  • 模拟算法.
  • Mellanox的LAG全称是什么?网卡的创建机制如何?(Link Aggregation Group 链路聚合组)
  • 在nodejs中使用ElasticSearch(三)通过ES语义检索,实现RAG
  • 本地部署阿里的万象2.1文生视频(Wan2.1-T2V-1.3B)模型
  • 仿真环境下实现场景切换、定位物体和导航行走
  • 指标异动拆解:数据分析师的实战指南
  • Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(七)