首页 > 编程语言 >算法训练day50卡玛70. 爬楼梯(进阶版)Leetcode322. 零钱兑换279. 完全平方数

算法训练day50卡玛70. 爬楼梯(进阶版)Leetcode322. 零钱兑换279. 完全平方数

时间:2024-03-25 23:29:41浏览次数:33  
标签:std 平方 进阶 int coins 70 day50 include dp

57. 爬楼梯(第八期模拟笔试)

题目分析

我们可以使用动态规划。动态规划的思想是用一个数组dp来保存到达每一级台阶的方法数。对于每一级台阶i,你可以从i-1, i-2, ..., i-m级台阶爬上来(只要这些台阶的索引大于等于0),因此到达第i级台阶的方法数就是这些dp[j]i-m <= j < i)的总和。

acm代码模式

#include <iostream>
#include <vector> 

int main() {
    int n, m;
    std::cin >> n >> m;
    std::vector<int> dp(n + 1, 0);
    dp[0] = 1;
    
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if(i - j >= 0) dp[i] += dp[i -j];   
        }
    }
    
    // for (int i : dp) std::cout << i << " ";
    std::cout << dp[n] << std::endl;
    return 0;
}

322. 零钱兑换

题目分析

本题是要求最少硬币数量,硬币是组合数还是排列数都无所谓!所以两个for循环先后顺序怎样都可以!

acm模式代码

#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>

class Solution {
public:
    int coinChange(std::vector<int>& coins, int amount) {
        std::vector<int> dp(amount + 1, INT_MAX);
        dp[0] = 0;
        for (int i = 1; i <= amount; i ++) {
            for (int j = 0; j < coins.size(); j ++) {
                if (i >= coins[j] && dp[i - coins[j]] != INT_MAX) dp[i] = std::min(dp[i - coins[j]] + 1, dp[i]);
            }
        }
        if (dp[amount] == INT_MAX) return -1;
        for (int i: dp) std::cout << i << " " ;
        return dp[amount];
        
    }
};

int main() {
    Solution sol;
    std::vector<int> coins = {1, 2, 5};
    int res = sol.coinChange(coins, 11);
    std::cout << std::endl;
    std::cout << res << std::endl;
    return 0;
}

279. 完全平方数

题目分析

  • 创建了一个大小为n + 1的数组dp,所有元素初始化为INT32_MAX,这表示对于每个目标值来说,初始状态下所需的完全平方数数量是未知的,假定为无限大。
  • dp[0] = 0意味着和为0的数字最少需要0个完全平方数(即没有数字时的情况)。
  • 外循环遍历从1到n的所有数字,代表当前考虑的目标和。
  • 内循环尝试所有可能的完全平方数,即所有小于等于当前目标和i的完全平方数。
  • 对于每一个ij,如果i大于或等于j的平方,那么dp[i](即组成和为i的最少完全平方数的数量)可以通过查看dp[i - j*j] + 1来更新。+1是因为j*j是当前考虑的一个完全平方数,而dp[i - j*j]则代表了减去这个完全平方数之后剩余部分的最优解。
  • 最终,dp[i]会被更新为所有可能的j中的最小值。

acm模式代码

#include <iostream>
#include <vector>

class Solution {
public:
    int numSquares(int n) {
        std::vector<int> dp(n + 1, INT32_MAX);
        dp[0] = 0;

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j * j <= n; j ++) 
                if(i - j*j >= 0) dp[i] = std::min(dp[i - j*j] + 1, dp[i]);
        }

        for (int i: dp) {
            std::cout << i << " " ;
        }

        return dp[n];
    }
};

int main() {
    Solution sol;
    sol.numSquares(12);
    return 0;
}

标签:std,平方,进阶,int,coins,70,day50,include,dp
From: https://blog.csdn.net/qq_36372352/article/details/137007498

相关文章

  • GEE入门及进阶教程|在 Earth Engine 中绘制图像集合
            在前面的内容中,我们计算了增强植被指数(EVI),以说明卫星图像上的波段运算,代码在单个图像上被调用一次。如果我们想以相同的方式计算整个ImageCollection中的每个图像的EVI,该怎么办?在这里,我们使用EarthEngine工作流程第二部分的关键工具,即.map命令。......
  • 并查集(反集)进阶 P1892 [BOI2003] 团伙
    现在有 n 个人,他们之间有两种关系:朋友和敌人。我们知道:一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友现在要对这些人进行组团。两个人在一个团体内当且仅当这两个人是朋友。请求出这些人中最多可能有的团体数。输入格式第一行输入一个整数 n 代表人数。第二行......
  • 苹果头显产品年内中国上市;「美版贴吧」Reddit 苦熬 19 年终上市丨 RTE 开发者日报 Vol
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人......
  • Java String类深入了解JDK各个版本进阶版本
    JavaString类深入了解JDK各个版本进阶版本一,底层类型在jdk11中Stringvalue存储字符串值是byte[]数组,String中存储字节码的是coder也是byte类型,因此String的底层数据存储类型成为了byte类型而在jdk8中String的Stringvalue存储字符串值是char[]数组,因此因此可......
  • CSCI 5708移动计算
    CSCI4176/CSCI5708移动计算截止日期:2023年11月14日星期日下午11点59分提交:在Brightspace请阅读-所有课业的一般重要说明:•对于要求您进行在线搜索的研究类型ques/ons或ques/ons,请确保您的答案中正确引用了所有参考文献。使用IEEE参考样式。•请记住,不能仅仅因为引用了参考文......
  • nginx进阶-3(32-34天)学习笔记
    nginx进阶-3(33-34天)学习笔记知识回顾1.nginx部署单机网站2.nginx部署多个网站3.nginx访问方式4.nginx安全5.nginx加密访问实战00---nginx企业实战1.nginx搭建一个文件共享供用户下载的服务器#步骤1.配置nginx文件cd/usr/local/nginx/conf/vhostvibbs.conf......
  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)
    基于python语言,采用经典自适应大邻域算法(ALNS)对需求拆分车辆路径规划问题(SDVRP)进行求解。目录往期优质资源1.适用场景2.代码调整3.求解结果4.代码片段参考往期优质资源经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的问题与算法......
  • Go语言进阶:深入理解深拷贝与浅拷贝
    Go语言进阶:深入理解深拷贝与浅拷贝原创 lipeilun 海天二路搬砖工 2024-03-1719:01 福建 听全文一、引言在Go语言的编程实践中,内存管理和数据复制是经常遇到的问题。特别是在处理复杂数据结构或自定义类型时,如何正确、高效地复制数据变得尤为重要。深拷贝与浅拷贝是......
  • Android14音频进阶:AudioFlinger究竟如何混音?(六十三)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • NCV8702MX33TCG电源管理线性稳压器芯片中文资料PDF数据手册引脚图图片价格
    产品概述:NCV8702是一款200mA低漏静止电流、低漏线性稳压器,带超低噪声特性。它的低噪音结合高电源抑制比(PSRR)使其特别适用于射频、音频或成像应用。该器件采用先进的BiCMOS工艺制造,可提供低电流耗量和卓越噪声性能的强大组合。NCV8702可稳定使用小型低值1µ电容器......