2月8日刷题总结

news2025/1/16 1:01:09

写题一点思路也没有,题解也不能看得很懂。

所以系统性的学习DP ing……跟着进度来,因此刷了一些已经刷过的类型的题(也算再次熟悉一下)

P1077 [NOIP2012 普及组] 摆花

题目描述

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 mm 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 nn 种花,从 11 到 nn 标号。为了在门口展出更多种花,规定第 ii 种花不能超过 a_iai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。

试编程计算,一共有多少种不同的摆花方案。

输入格式

第一行包含两个正整数 nn 和 mm,中间用一个空格隔开。

第二行有 nn 个整数,每两个整数之间用一个空格隔开,依次表示 a_1,a_2, \cdots ,a_na1,a2,⋯,an

输出格式

一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 10^6+7106+7 取模的结果。

输入输出样例

输入 #1复制

2 4

3 2

输出 #1复制

2

说明/提示

【数据范围】

对于 20\%20% 数据,有 0<n \le 8,0<m \le 8,0 \le a_i \le 80<n≤8,0<m≤8,0≤ai≤8。

对于 50\%50% 数据,有 0<n \le 20,0<m \le 20,0 \le a_i \le 200<n≤20,0<m≤20,0≤ai≤20。

对于 100\%100% 数据,有 0<n \le 100,0<m \le 100,0 \le a_i \le 1000<n≤100,0<m≤100,0≤ai≤100。

NOIP 2012 普及组 第三题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int min_(int x,int y)
{
    return x>y?y:x;
}
int main()
{
    int n,m,a[105],dp[105][105]={0};
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",a+i);
    }
    dp[0][0]=1;
    for(int i=1;i<=n;i++)//花种类的遍历
    {
        for(int j=0;j<=m;j++)//盆数的递增
        {
            for(int k=0;k<=min_(j,a[i]);k++)//k不能超过j和a[i];
            {
                dp[i][j]+=dp[i-1][j-k];
                dp[i][j]%=1000007;
            }
        }
    }
    printf("%d",dp[n][m]);
}

不同路径

题目描述:

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

输入:m = 3, n = 7

输出:28

示例 2:

输入:m = 3, n = 2

输出:3

解释:

从左上角开始,总共有 3 条路径可以到达右下角。

1. 向右 -> 向下 -> 向下

2. 向下 -> 向下 -> 向右

3. 向下 -> 向右 -> 向下

示例 3:

输入:m = 7, n = 3

输出:28

示例 4:

输入:m = 3, n = 3

输出:6

提示:

  • 1 <= m, n <= 100

  • 题目数据保证答案小于等于 2 * 109

思路:和昨天的过河卒一模一样,比那个简单多了。首先我们找他的状态转移方程,坐标为(i,j)的点的路径数为a[i][j]=a[i-1][j]+a[i][j-1];再判断一下边界即可。昨天的总结有更详细的解释

代码如下:

int uniquePaths(int m, int n)
{
    int dp[101][101];
    int i=1,j=1;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(i==1&&j==1)
            {
                dp[i][j]=1;
            } else
            if(i==1&&j>1)判断上边界
            {
                dp[i][j]=dp[i][j-1];
            } else
            if(i>1&&j==1)//判断左边界
            {
                dp[i][j]=dp[i-1][j];
            }
            else dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
    }
    return dp[n][m];
}

使用最小花费爬楼梯

题目描述

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入:cost = [10,15,20]

输出:15

解释:你将从下标为 1 的台阶开始。

- 支付 15 ,向上爬两个台阶,到达楼梯顶部。

总花费为 15 。

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]

输出:6

解释:你将从下标为 0 的台阶开始。

- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。

- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。

- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。

- 支付 1 ,向上爬一个台阶,到达楼梯顶部。

总花费为 6 。

提示:

  • 2 <= cost.length <= 1000

  • 0 <= cost[i] <= 999

思路:第一步确定dp数组的含义:第二步:我们找状态转移方程:楼梯的步数有俩个来源,下一个楼梯,下俩个楼梯,也就是f[i]=min(f[i-1],f[i-2]);第三步dp数组的初始化,dp[0]=const[0],dp[1]=cost[1];

第四步,确定遍历顺序,从2开始。

代码如下

int minCostClimbingStairs(int* cost, int costSize)
{
    int min(int x,int y)
    {
        return x>y?y:x;
    }
    int dp[1005];//dp数组初始化
    dp[0]=cost[0];
    dp[1]=cost[1];
    for(int i=2;i<costSize;i++)
    {
        dp[i]=min(dp[i-1],dp[i-2])+cost[i];
    }
    return min(dp[costSize-1],dp[costSize-2]);//最后俩个选其中大的那个
}

整数拆分

题目描述:

给定一个正整数 n ,将其拆分为 k正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积

示例 1:

输入: n = 2

输出: 1

解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10

输出: 36

解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

思路:第一步我们确定dp[i]的含义:分解i的最大乘积,第二步我们找状态转移方程

dp[i]=max(dp[i],max(dp[i-j]*j,(i-j)*i);第三步dp数组的初始化dp[2]=1;第四步确定遍历顺序,也就是从3开始。

code:

int integerBreak(int n)
{
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    int dp[65]={0};dp[2]=1;//2可以拆分为1*1=1
    for(int i=3;i<=n;i++)//从3开始遍历
    {
        for(int j=1;j<i-1;j++)
        {
            dp[i]=max(dp[i],max(dp[i-j]*j,(i-j)*j));
        }
    }
    return dp[n];
}

不同的二叉搜索树

题目描述

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3

输出:5

示例 2:

输入:n = 1

输出:1

提示:

  • 1 <= n <= 19

思路:第一步我们确定dp数组的含义:1到i为节点组成的⼆叉搜索树的个数为dp[i]。。第二步我们找状态转移方程:dp[i]+=dp[j-1]*dp[i-j](笛卡尔积);第三步我们对dp数组初始化:dp[0]=1,dp[1]=1(i=0时为空树也是一棵树),第四步确定遍历顺序;从i=2开始。

笛卡尔积粗略解释:

举例而言,若创建以 3 为根、长度为 7 的不同二叉搜索树,整个序列是 [1, 2, 3, 4, 5, 6, 7] ,我们需要从左子序列 [1, 2,] 构建左子树,从右子序列 [4, 5, 6, 7] 构建右子树,然后将它们组合(即笛卡尔积)。

code:

class Solution 
{
public:
    int numTrees(int n) 
    {
        vector<int> dp(n+1);
        dp[1]=1;
        dp[0]=1;
        for(int i=2;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                dp[i]+=dp[j-1]*dp[i-j];
            }
        }
        return dp[n];
    }
};

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

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

相关文章

力扣SQL刷题5

目录597. 好友申请 I&#xff1a;总体通过率602. 好友申请 II &#xff1a;谁有最多的好友603. 连续空余座位1045. 买下所有产品的客户597. 好友申请 I&#xff1a;总体通过率 官方讲的题目太繁琐了&#xff0c;大概就是&#xff08;表2中列1列2不全相同的行数&#xff09;/&a…

测试开发之Vue学习笔记-Vue路由

Vue路由18. Vue-路由基础安装 cnpm install --save vue-router官方文档&#xff1a;https://router.vuejs.org/zh/src/main.js中&#xff08;1&#xff09;引入VueRouter&#xff1a;import VueRouter from "vue-router"&#xff08;2&#xff09;使用VueRouter&…

《知行合一王阳明》读书笔记

《知行合一王阳明》用通俗易懂的语言介绍了王阳明一生的传奇经历和他的心学的核心思想。这篇读后感主要介绍一下我对心学的理解。在我看来&#xff0c;心学最本质的要求是“致良知”&#xff0c;最核心的方法论是“知行合一”。致良知是说要遵从自己的本心。王阳明相信人性本善…

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天(基础算法-上 专题)】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…

兔年新佳绩,思迈特软件获奖喜讯纷至沓来

近年来&#xff0c;随着大数据、云计算、人工智能、5G等技术加速创新&#xff0c;越来越多的ToB企业开始下沉探索边际&#xff0c;纵深业务服务场景&#xff0c;通过技术与行业的深度融合&#xff0c;为客户提供全面的转型服务&#xff0c;尽一切可能创造客户价值和商业价值。思…

【C++: list的模拟实现】

目录 1 list的简单回顾 2 类中成员变量的声明 3 __list_iterator 中运算符重载 4 list中的迭代器 5 list中增删查改以及clear 6 const迭代器 6.1 __list_iterator的重新实现 6.2 list类的巧妙修改 7 构造函数&&拷贝构造&&赋值运算符重载 8 反向迭代器…

金三银四丨黑蛋老师带你剖析-二进制漏洞

作者&#xff1a;黑蛋二进制漏洞岗上篇文章我们初步了解了一下简历投递方式以及二进制方向相关逆向岗位的要求&#xff0c;今天我们就来看看二进制漏洞相关的岗位&#xff0c;当然&#xff0c;漏洞岗位除了分不同平台&#xff0c;也有漏洞挖掘岗和漏洞分析利用岗。同样&#xf…

[人工智能-综述-11]:ChatGPT, 通用人工智能还是要来了

该来的还是要来的&#xff01;补充信息&#xff1a;ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&…

C语言共用体(C语言union用法)详解

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a;un…

STM32的HAL库分析及使用

STM32的HAL库分析及使用 STM32的三种开发方式 通常新手在入门STM32的时候&#xff0c;首先都要先选择一种要用的开发方式&#xff0c;不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库&#xff0c;而极少部分人会通过直接配置寄存器进行开发…

【Mysql第八期 子查询】

文章目录前言1. 需求分析与问题解决1.2 子查询的基本使用1.3 子查询的分类2. 单行子查询2.1 单行比较操作符2.2 代码示例2.5 子查询中的空值问题3. 多行子查询3.1 多行比较操作符3.2 代码示例3.3 空值问题4. 相关子查询4.2 代码示例4.3 EXISTS 与 NOT EXISTS关键字4.4 相关更新…

开发者社区「运营官」招募启动啦!

国内首个聚焦AI3D视觉技术的开发者社区「运营官」招募启动啦&#xff01; 想积累实习经验&#xff0c;却苦于找不到大厂机会&#xff1f; 想进入AI3D视觉行业&#xff0c;却苦于没有知音伯乐&#xff1f; 想积累更多工作经历&#xff0c;却苦于路程奔波、天各一方&#xff1f…

我们的微服务中为什么需要网关?

说起 Spring Cloud Gateway 的使用场景&#xff0c;我相信很多小伙伴都能够脱口而出认证二字&#xff0c;确实&#xff0c;在网关中完成认证操作&#xff0c;确实是 Gateway 的重要使用场景之一&#xff0c;然而并不是唯一的使用场景。在微服务中使用网关的好处可太多了&#x…

MODBUS TCP 转 PROFINET 网关从站快速配置手册

一、本案例是1500PLC通过微硬创新MODBUS TCP 转 PROFINET 网关连接组态王服务器从站快速配置&#xff0c;将 Modbus TCP 设备数据转接入到西门子 PROFINET 网络中 二、设备列表如下&#xff1a; 三、MODBUS TCP 转 PROFINET 网关从站快速配置方法步骤&#xff1a; 第1步&#x…

全网最详细的介绍ChatGPT:包括ChatGPT原理、应用、如何试用以及回答ChatGPT能否让程序员失业

文章目录1. 介绍ChatGPT2. ChatGPT示例3. 试用ChatGPT4. ChatGPT原理5. ChatGPT应用5.1 世界杯问题咨询5.2 写书信&#xff08;情书&#xff09;6. 总结1. 介绍ChatGPT 今天开车去上班的路上&#xff0c;听到电台介绍ChatGPT&#xff0c;此时百度的股价涨幅为25%&#xff0c;当…

谈谈Spring中Bean的生命周期?(让你瞬间通透~)

目录 1.Bean的生命周期 1.1、概括 1.2、图解 2、代码示例 2.1、初始化代码 2.2、初始化的前置方法和后置方法&#xff08;重写&#xff09; 2.3、Spring启动类 2.4、执行结果 2.5、经典面试问题 3.总结 1.Bean的生命周期 1.1、概括 Spring中Bean的生命周期就是Bean在…

Spring Cloud Alibaba+saas企业架构技术选型+架构全景业务图 + 架构典型部署方案

基于Spring Cloud Alibaba 分布式微服务高并发数据平台化(中台)思想多租户saas设计的企业开发架构&#xff0c;支持源码二次开发、支持其他业务系统集成、集中式应用权限管理、支持拓展其他任意子项目。 一、架构技术选型 核心框架 Spring Boot SOA Spring Cloud …

如何搞垮一个测试团队【反向教学,最为致命】

如何搞垮一个测试团队【反向教学&#xff0c;最为致命】 目录&#xff1a;导读 一、QA 二、项目经理 三、产品经理 四、开发人员 五、测试人员 六、组织文化 七、组织战略 要想彻底搞垮一个测试团队并非易事&#xff0c;需要多角色通力配合、多方联动、综合施策&#x…

FFmpeg5.0源码阅读——内存池AVBufferPool

摘要&#xff1a;FFmpeg中大多数数据存储比如AVFrame,AVPacket都是通过AVBufferRef管理的&#xff0c;而承载数据的结构为AVBuffer。本文主要通过FFmpeg源码来分析下FFmpeg中AVBuffer相关的实现。 关键字&#xff1a;AVBuffer、AVBufferPool、AVBufferPool 1. AVBufferRef 1.…

谁说菜鸟不会数据分析,不用Python,不用代码也轻松搞定

作为一个菜鸟&#xff0c;你可能觉得数据分析就是做表格的&#xff0c;或者觉得搞个报表很简单。实际上&#xff0c;当前有规模的公司任何一个岗位如果没有数据分析的思维和能力&#xff0c;都会被淘汰&#xff0c;数据驱动分析是解决日常问题的重点方式。很多时候&#xff0c;…