代码随想录训练营31day-动态规划4

news2024/12/28 18:36:16

一、完全背包(参考博客)

和01背包区别在于物品可以无限次放入背包。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。

因此在需要在遍历顺序上进行区别,参考代码随想录:

二、518.零钱兑换II

题目求的是组合数目,和常见的完全背包问题,求最大价值不一样。

还是动态规划几个步骤。

1 定义dp[j],表示j数字下,能组合成j的组合数目。

2 状态方程:dp[j]由dp[j - coins[i]]转移得到,即:

dp[j]  +=  dp[j - coins[i]]

3 初始化dp[0] = 1,如果等于0,那么累加依旧等于0,其余值为0;

4 返回dp[amount];

5 dp循环验证;

int change(int amount, int* coins, int coinsSize) {
    //保证第一个为1,其余为0
    int* dp = (int*)calloc(amount + 1, sizeof(int));
    dp[0] = 1;

    for(int i = 0; i < coinsSize; i++)
    {
        for(int j = coins[i]; j <= amount; j++)
        {
            dp[j] += dp[j - coins[i]];
        }
    }

    return dp[amount];

}

三、377. 组合总和 Ⅳ

给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。

注意:这里组合其实可以理解成排列,因为顺序不同数字相同也看作一个组合方式。

如果求组合数就是外层for循环遍历物品,内层for遍历背包

如果求排列数就是外层for遍历背包,内层for循环遍历物品

和前面一样,需要动态规划的步骤:

1 设置dp[j],代表数字j的组合个数;

2 状态转移:

dp[j]  +=  dp[j - nums[i]];

3 初始化时候,dp[0] = 1,其余初始化为0;

4 遍历顺序,如上for循环顺序。

int combinationSum4(int* nums, int numsSize, int target) {
    //保证第一个为1,其余为0
    int* dp = (int*)calloc(target + 1, sizeof(int));
    dp[0] = 1;

    for(int j = 0; j <= target; j++)
    {
        for(int i = 0; i < numsSize; i++)
        {
            if(j >= nums[i])
              dp[j] += dp[j - nums[i]];
        }
    }

    return dp[target];
}

四、322. 零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。

注意题目所求的是最少得硬币个数。

动态规划步骤:

1 dp[j]代表j数最少的硬币个数;

2 动态转移公式:

dp[j] = min(dp[j], dp[j - coins[i]] + 1)

3 初始化:dp[0] = 0,凑成0的个数为0,其余应该是INT_MAX;

4 遍历顺序,先遍历物品,再遍历value;

#define MIN(a, b) (a) > (b)? (b): (a)
int coinChange(int* coins, int coinsSize, int amount) {
    int* dp = (int*)malloc(sizeof(int) * (amount + 1));

    for(int i = 0; i <= amount; i++)
    {
        dp[i] = INT_MAX;
    }
    dp[0] = 0;

    for(int i = 0; i < coinsSize; i++)
    {
        for(int j = coins[i]; j <= amount; j++)
        {
            if(dp[j - coins[i]]  == INT_MAX) 
               continue;
            dp[j] = MIN(dp[j], dp[j - coins[i]] + 1);
        }
    }

    return dp[amount] == INT_MAX? -1 : dp[amount];
}

五、279.完全平方数

 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

思路:完全平方数看作物品,n代表背包,物品可以多次放入。

1 dp[j] 代表j的最小数量完全平方数;

2 状态转移公式:

dp[j] = min(dp[j], dp[j - i * i] +1);

3 初始化:dp[0] = 0, 其余值为INT_MAX;

4 循环顺序 先遍历物品,再遍历价值

#define MIN(a, b) (a) > (b)? (b): (a)
int numSquares(int n) {
    int* dp = (int*)malloc(sizeof(int) * (n + 1));

    for(int i = 0; i <= n; i++)
    {
        dp[i] = INT_MAX;
    }
    dp[0] = 0;

    for(int i = 1; i*i <= n; i++)//注意边界
    {
        for(int j = i*i; j <= n; j++)//注意起点,按照含义来理解
        {
            dp[j] = MIN(dp[j], dp[j - i*i] + 1);
        }
    }

    return dp[n] == INT_MAX? -1 : dp[n];
}

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

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

相关文章

光端机(2)——光纤通信学习笔记九

学习笔记里面只关注基本原理和概念&#xff0c;复杂的公式和推导都没有涉及 光端机 光发射机 作用&#xff1a;实现电光转换。将来自电端机的电信号对光源发出的光波进行调制&#xff0c;然后将调制好的光信号耦合到光线中传输。 基本性能要求 1.合适的发光波长&#xff08;光…

FreeBSD RISCV 在QEME中实践-网络配置

在前一篇文章中&#xff0c;我们一起进行了FreeBSD RISCV 在QEME中实践 现在&#xff0c;让我们配置好网络吧&#xff01; 先上结论&#xff1a;用默认配置启动即可&#xff0c;网络就加载好了&#xff0c;只是不能ping罢了。因为不能ping&#xff0c;以为网络没通&#xff0…

如何使用ArcGIS Pro进行选房分析

无论是研究城市规划布局还是寻找理想的住房&#xff0c;都需要综合考虑购物、医疗、教育和休闲等多方面因素&#xff0c;此时我们的GIS软件就可以派上用场了&#xff0c;这里为大家介绍一下如何使用 ArcGIS Pro 进行选房分析&#xff0c;希望能对你有所帮助。 数据来源 教程所…

【iOS】NSOperation、NSOperationQueue

文章目录 前言一、NSOperation、NSOperationQueue 简介二、NSOperation、NSOperationQueue 操作和操作队列三、NSOperation四、NSOperationQueue五、NSOperationQueue 控制串行执行、并发执行六、 NSOperation 操作依赖七、NSOperation 优先级八、NSOperation、NSOperationQueu…

概率论 科普

符号优先级 概率公式中一共有三种符号&#xff1a;分号 ; 、逗号 , 、竖线 | 。 ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。分号前的 表示的是这个式子用来预测分布的随机变量x&#xff0c;分号后的…

土壤重金属含量分布、Cd镉含量、Cr、Pb、Cu、Zn、As和Hg、土壤采样点、土壤类型分布

土壤是人类赖以生存和发展的重要资源之一,也是陆地生态系统重要的组成部分。近年来, 随着我国城市化进程加快&#xff0c;矿产资源开发、金属加工冶炼、化工生产、污水灌溉以及不合理的化肥农药施用等因素导致重金属在农田土壤中不断富集。重金属作为土壤环境中一种具有潜在危害…

基于Springboot的校园志愿者管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园志愿者管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

如何通过前端表格控件在10分钟内完成一张分组报表?

前言&#xff1a; 当今时代&#xff0c;报表作为信息化系统的重要组成部分&#xff0c;在日常的使用中发挥着关键作用。借助报表工具使得数据录入、分析和传递的过程被数字化和智能化&#xff0c;大大提高了数据的准确性及利用的高效性。而在此过程中&#xff0c;信息化系统能…

论文架构介绍

论文架构 背景&#xff1a;建议2段左右完成&#xff0c;字数控制在500左右为佳&#xff0c;对应子题目1过渡段&#xff1a;写150字左右的过渡段&#xff0c;承上启下&#xff0c;回答部分子题目2、3的要求正文实践部分&#xff1a;一般3-7个论点&#xff0c;根据题目的要求来看…

JS基础:变量的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取…

DW PCIE LINUX的初始化分析

一些定义 PCIE复位&#xff1a;一些PCIE复位的知识链接 PCIE初始化&#xff1a;初始化相关定义看下面链接和下图 C语言简化初始化看本人的《DW PCIE的PCIE的RC和EP最简初始化学习笔记》文章。 Sticky Registers&#xff1a;与传统的复位方式相同&#xff0c;FLR方式不能复位…

线程数据共享和安全(ThreadLocal)

目录 介绍图解底层代码解析 ThreadLocal是一个Java中的类&#xff0c;用于在多线程环境下存储线程本地变量。每个线程都可以独立访问自己的ThreadLocal变量&#xff0c;而不会影响其他线程的变量。ThreadLocal通常用来解决多线程并发访问共享变量时的线程安全性问题。 ThreadL…

Git操作GitHub全记录

目录 一. GitHub ssh-key配置二. 添加GitHub仓库Git提交本地代码到Github仓库远程克隆仓库到本地的文件夹再上传本地的无.git的文件夹上传到远程仓库 三. Git删除Github仓库或某个文件或文件夹1.删除已有Github仓库2.删除Github中的某个文件或文件夹①如果没有建立本地库或者克…

OSEK任务管理

1 前言 RTOS通过任务&#xff08;task&#xff09;来组织应用层程序框架&#xff08;framework&#xff09;&#xff0c;支持任务的并发和同步执行&#xff08;concurrent and asynchronous execution of tasks&#xff09;&#xff0c;并通过调度器&#xff08;scheduler&…

基于ESP32和ESP8266的物联网开发过程(一)

给大家演示一个小工具&#xff0c;通过Wifi去连接ESP32或者ESP8266出来的一个热点。连接到这个热点之后&#xff0c;可以输密码&#xff0c;也可以不输密码。这里我设置的是不输密码直接进来&#xff0c;我这个是ESP8266。 进来之后直接点配置Wifi&#xff0c;然后可以看到ESP8…

uniapp 禁止截屏(应用内,保护隐私)插件 Ba-ScreenShot

禁止截屏&#xff08;应用内&#xff0c;保护隐私&#xff09; Ba-ScreenShot 简介&#xff08;下载地址&#xff09; Ba-ScreenShot 是一款uniapp禁止应用内截屏的插件&#xff0c;保护隐私&#xff0c;支持禁止截屏、放开截屏 截图展示 也可关注博客&#xff0c;实时更新最…

uniapp的底部弹出层实现保姆式教程

实现照片: 此过程先进入uniapp官网,找到扩展组件 打开找到里面的uni-popup和uni-icons 点击进入,下载&安装 点击下载并导入HBuilderX 导入到你使用的目录,如test目录

4+1视图,注意区分类图与对象图

注意区分类图和对象图。对象图标记的是对象名&#xff0c;命名形式 对象名:类名&#xff0c;或者:类名。这里没有出现冒号&#xff0c;表示的是类图。 对象图(object diagram)。 对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一…

RabbitMQ 是如何做延迟消息的 ?——Java全栈知识(15)

RabbitMQ 是如何做延迟消息的 &#xff1f; 1、什么是死信&#xff1f; 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09;&#xff1a; 消费者使用 basic.reject 或 basic.nack 声明消费失败&#xff0c;并且消息的 reque…

(论文阅读-优化器)Selectivity Estimation using Probabilistic Models

目录 摘要 一、简介 二、单表估计 2.1 条件独立Condition Independence 2.2 贝叶斯网络Bayesian Networks 2.3 查询评估中的贝叶斯网络 三、Join选择性估计 3.1 两表Join 3.2 概率关系模型 3.3 使用PRMs的选择性估计 四、PRM构建 4.1 评分标准 4.2 参数估计 4.3 结…