【代码随想录——动态规划——第三周】

1.目标和

在这里插入图片描述

这里设置背包的最大长度为2100即可,因为题目中有说数组之和小于1000.但考虑到我们需要实行j+nums[i]所以保守起见我们设置的数应该稍大于2000即可,这里我们设置为2100。

1.1 我的解法(粗糙了)

func findTargetSumWays(nums []int, target int) int {//dp[i][j],这里的i代表nums中的前i个数,j代表targetn := len(nums)dp := make([][]int, n)maxNum := 2100for i := 0; i < n; i++ {dp[i] = make([]int, maxNum+1)}if nums[0] == 0 {dp[0][nums[0]] = 2} else {dp[0][nums[0]] = 1}for i := 1; i < n; i++ {for j := 0; j < maxNum-1000; j++ {target1 := abs(j - nums[i])target2 := abs(j + nums[i])if target1 != target2 || j == 0 || nums[i] == 0 {dp[i][j] = dp[i-1][target1] + dp[i-1][target2]} else {dp[i][j] = dp[i-1][target1]}}}return dp[n-1][abs(target)]
}func abs(a int) int {if a > 0 {return a}return -a
}

1.2 它解

假设加法的总和为x,那么减法对应的总和就是sum - x。

所以我们要求的是 x - (sum - x) = target

x = (target + sum) / 2

此时问题就转化为,装满容量为x的背包,有几种方法。

这里的x,就是bagSize,也就是我们后面要求的背包容量。

大家看到(target + sum) / 2 应该担心计算的过程中向下取整有没有影响。

这么担心就对了,例如sum 是5,S是2的话其实就是无解的。

func findTargetSumWays(nums []int, target int) int {sum := 0for _, v := range nums {sum += v}//target的绝对值已经大于sumif abs(target) > sum {return 0}//要么全为奇数,要么全为偶数if (sum+target)%2 == 1 {return 0}// 计算背包大小bag := (sum + target) / 2// 定义dp数组dp := make([]int, bag+1)// 初始化dp[0] = 1// 遍历顺序for i := 0; i < len(nums); i++ {for j := bag; j >= nums[i]; j-- {//推导公式dp[j] += dp[j-nums[i]]//fmt.Println(dp)}}return dp[bag]
}func abs(x int) int {return int(math.Abs(float64(x)))
}

2.一和零

在这里插入图片描述
思路:这里将i表示0的个数,j表示1的个数
当i大于等于字符串中0的个数且j大于等于字符串中1的个数时,可以得到递推公式为
dp[i][j] = max(dp[i][j], dp[i-itemList[k].num0][j-itemList[k].num1]+1)

func findMaxForm(strs []string, m int, n int) int {dp := make([][]int, m+1)for i := 0; i <= m; i++ {dp[i] = make([]int, n+1)}itemList := make([]*Item, 0)for i := 0; i < len(strs); i++ {num0, num1 := getCountOf01(strs[i])itemList = append(itemList, &Item{num0: num0, num1: num1})}//i表示0的个数,j表示1的个数for k := 0; k < len(strs); k++ {for i := m; i >= itemList[k].num0; i-- {for j := n; j >= itemList[k].num1; j-- {dp[i][j] = max(dp[i][j], dp[i-itemList[k].num0][j-itemList[k].num1]+1)}}//for i := 0; i <= m; i++ {//	fmt.Println(dp[i])//}//fmt.Println("==========")}return dp[m][n]
}func max(a, b int) int {if a > b {return a}return b
}type Item struct {num0, num1 int
}func getCountOf01(str string) (num0, num1 int) {for i := 0; i < len(str); i++ {if str[i:i+1] == "0" {num0++} else if str[i:i+1] == "1" {num1++}}return
}

3.完全背包理论基础

在这里插入图片描述
https://kamacoder.com/problempage.php?pid=1052

和零一背包的区别在于,这里面的材料可以重复拾取。

// test_CompletePack1 先遍历物品, 在遍历背包
func test_CompletePack1(weight, value []int, bagWeight int) int {// 定义dp数组 和初始化dp := make([]int, bagWeight+1)// 遍历顺序for i := 0; i < len(weight); i++ {// 正序会多次添加 value[i]for j := weight[i]; j <= bagWeight; j++ {// 推导公式dp[j] = max(dp[j], dp[j-weight[i]]+value[i])// debug//fmt.Println(dp)}}return dp[bagWeight]
}// test_CompletePack2 先遍历背包, 在遍历物品
func test_CompletePack2(weight, value []int, bagWeight int) int {// 定义dp数组 和初始化dp := make([]int, bagWeight+1)// 遍历顺序// j从0 开始for j := 0; j <= bagWeight; j++ {for i := 0; i < len(weight); i++ {if j >= weight[i] {// 推导公式dp[j] = max(dp[j], dp[j-weight[i]]+value[i])}// debug//fmt.Println(dp)}}return dp[bagWeight]
}func max(a, b int) int {if a > b {return a}return b
}

4.零钱兑换II

在这里插入图片描述

func change(amount int, coins []int) int {// 定义dp数组dp := make([]int, amount+1)// 初始化,0大小的背包, 当然是不装任何东西了, 就是1种方法dp[0] = 1// 遍历顺序// 遍历物品for i := 0; i < len(coins); i++ {// 遍历背包for j := coins[i]; j <= amount; j++ {// 推导公式dp[j] += dp[j-coins[i]]}}return dp[amount]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BetterZip 5软件安装包下载

BetterZip是一款功能强大的Mac解/压缩软件&#xff0c;可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍&#xff0c;以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

R语言 | 绘制带P值的差异柱状图

原文链接&#xff1a;R语言 | 绘制带P值的差异柱状图 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡是在社群同学&#xff0c;可免费获得自2021年11月份至今全部教程&…

Vue55-TodoList案例-本地存储

一、TodoList案例-本地存储 此时&#xff0c;修改对象里面的属性&#xff0c;watch监视不到&#xff01; 需要深度监视&#xff0c;就不能用简写形式&#xff01; 二、jeecg-boot中的本地存储 jeecg-boot中&#xff0c;浏览器的本地存储&#xff0c;存储的是token&#xff01;…

Parallels Desktop 19 for mac破解版安装激活使用指南

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

git 如何撤销已经 push 的 merge

今天在合并代码时, 发现自己失误把另外一个分支 B 的代码合并到了自己分支 C, 于是想到要撤销这次 merge 一般地, 如果我们想要撤销某次 commit 可以 git revert <commit-id>. 然而, 对于 merge 类型的 commit 不能直接 git revert <commit-id> 这里举个例子: 我…

最新编程语言排行榜,C++ 和 Go 成为新王?!

大家好&#xff0c; 我是不爱敲代码吖,2024 年 6 月最新的 TIOBE 编程语言排行榜已经发布&#xff0c;如图&#xff1a; 注意&#xff0c;TIOBE 编程语言排行榜是基于 全球 工程师的数量、课程、热门网站、第三方供应商综合计算出来的&#xff0c;只是一个编程语言流行度和趋势…

MBTI:探索你的性格类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

网络知识:这些特殊的IP地址,具体的用途你都知道吗

目录 一、0.0.0.0 二、255.255.255.255 限制广播地址 三、127.0.0.1 本机地址 四、224.0.0.1 组播地址 五、169.254.x.x 六、10.x.x.x、172.16。x。x&#xff5e;172.31。x。x、192.168。x。x 私有地址 对于计算机网络来说&#xff0c;IP地址是非常重要的概念&#xff0c…

胡说八道(24.6.10)——数电与STM32

至此&#xff0c;信号与系统的简单笔记已经全部都写完了。其实&#xff0c;信号与系统的知识远远不只这些&#xff0c;总之&#xff0c;我的老师没讲完。其真实的原因是不在考试大纲里面。今天&#xff0c;看到一个短视频——学习的意义。其中有句话说&#xff0c;“因为考试不…

IEEE802.11a中的同步

目录 1.前言2.IEEE802.11a中的同步3.分组检测4.分组检测常用算法 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 最近有其他很多事情要做&#xff0c;接收机这部分本身内容也更难&#xff0c;涉及很多理论知识&#xff0c;本来之前对于随机信号和假设检验就没怎么学习透…

请详细列出获取商品详情接口的实现过程,包括从请求处理、数据接收、结果返回等各个环节的详细步骤。

当实现一个获取商品详情接口时&#xff0c;通常可以遵循以下详细步骤来确保接口的稳定性、可维护性和性能。 1. 需求分析 明确接口功能&#xff1a;确定API接口需要返回哪些商品详情信息&#xff0c;如商品名称、价格、库存、描述、图片链接等。接口调用者&#xff1a;确定哪些…

100V宽电压H62410A恒压芯片 24V降压5V 24V降压12V电源IC

H62410A是一款宽电压100V 内置MOS管的降压恒压芯片&#xff0c;适用于24V降压至5V或12V的应用场景。其内置100V耐压MOS和宽压8V-90V的输入范围&#xff0c;使得它能够在多种电压条件下稳定工作。同时&#xff0c;支持输出电压可调至3.3V&#xff0c;为不同设备提供了灵活的电源…

centos7.9部署k8s的几种方式

文章目录 一、常见的k8s部署方式1、使用kubeadm工具部署2、基于二进制文件的部署方式3、云服务提供商的托管 Kubernetes 服务4、使用容器镜像部署或自动化部署工具 二、使用kubeadm工具部署1、硬件准备&#xff08;虚拟主机&#xff09;2、环境准备2.1、所有机器关闭防火墙2.2、…

Vue49-props属性

一、当同一个组件标签被使用多次 因为data属性写的是函数形式&#xff01; 二、需求&#xff1a;老王也想用<Student>组件&#xff0c;但是需要动态把老王想要的值传进来。 2-1、使用props属性接收参数 使用props属性&#xff0c;接收的这三个参数&#xff0c;是被保存在…

软件概要设计书(Word原件项目直接套用)

1引言 1.1编写目的 1.2项目背景 1.3参考资料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4运行环境设计 2.5设计目标 3系统功能模块设计 3.1个人办公 4性能设计 4.1响应时间 4.2并发用户数 5接口设计 5.1接口设计原则 5.2接口实现方式 6运行设计 6.1运行模块…

JetLinks开源物联网平台社区版部署教程

1.上github搜素jetlinks 2.找到源代码,并且下载到本地。 3.项目下载完成之后,还需要另外下载三个核心依赖模块。在github找到jetlinks。 4.点击进去下载,下载完成之后,你会发现里面有三个文件夹是空白的,先不用理会,把它复制到jetlinks-commnity目录下,并且在pom.xml添加…

哪个品牌台灯护眼效果好?几款护眼效果好的专业护眼灯品牌推荐

随着科技的不断发展和生活方式的改变&#xff0c;儿童青少年近视率的增长趋势引起了人们的关注。近视不仅对孩子们的视力健康构成威胁&#xff0c;还可能对他们的学习和日常生活带来不便。因此&#xff0c;如何有效地预防和改善儿童青少年的视力问题成为了一个亟待解决的课题。…

如何在WIndows虚拟机安装 macOS 黑苹果系统?

在本教程中&#xff0c;我们将介绍如何在虚拟机上安装 macOS 黑苹果系统。黑苹果系统是非苹果公司官方支持的 macOS 系统的非官方版本&#xff0c;可以在普通 PC 上运行。请注意&#xff0c;安装黑苹果系统可能违反苹果的许可协议&#xff0c;请自行承担风险。参考视频教程&…

k8s部署短视频网站(后台+web前端+web管理)

一、系统环境 系统centos7k8sv1.24containerdv1.7.16etcdv3.5.0 二、镜像生成工具准备 nerdctlv1.7.6buildkitv0.13.2 1 nerdctl安装 下载&#xff1a; wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-full-1.7.6-linux-amd64.tar.gz …

vue标签组

先看样式 再看代码 <div v-else class"relative"><n-tabs ref"tabsInstRef" v-model:value"selectValue" class"min-w-3xl myTabs"><n-tab-panev-for"(tab) in songsTags" :key"tab.name" displ…