华为机试_HJ61 放苹果【简单】【收藏】

news2024/12/26 0:25:05

目录

描述

输入描述:

输出描述:

解题过程

提交代码

递归方法

动态规划方法

学习代码

递归方法

动态规划方法

收藏点


描述

把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?

注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。

数据范围:0≤m≤10 ,1≤n≤10 。

输入描述:

输入两个int整数

输出描述:

输出结果,int型

解题过程

考察的是递归和动态规划,但是无论是前者和后者都没什么思路。所以就两种方法分别进行了学习,有不少收获。

发出一个疑问:我写的;大佬写的: 

我们两个人定义的数组长度不同,循环的次数也不一样,我也成功实现了。所以大佬这么写是因为动态规划的格式就是这样,还是只是因为防溢出? 

解答:↑应该是格式。。所以我可能需要换一种写法,虽然我这么写也不错。

(截图中代码来源于:动态规划:01背包问题_anieoo的博客-CSDN博客_01背包问题)

提交代码

经过学习——

递归方法

#include <stdio.h>
//递归方法
int func(int m,int n)//苹果个数是m,盘子个数是n
{
    if(m==0||n==1)
    return 1;//如果只剩一个盘子,或者没有苹果的话,那么就只有一种分法。
    else if(m<n)
    return func(m,m);//如果苹果数小于盘子数,那就相当于把m个苹果在m个盘子里进行排列组合
    else 
    return func(m-n,n)+func(m,n-1);
    //如果苹果数多于盘子数,那要考虑两种情况:1. 每个盘子都有苹果;2. 1到(n-1)个盘子里有苹果。
    //如果苹果数多于盘子数,结果是两种情况相加。
}
int main() {
    int a,b;
    while (scanf("%d %d", &a, &b)!= EOF) { 
        printf("%d\n",func(a,b));
    }
    return 0;
}

动态规划方法

(见“解题过程”部分。)

#include<stdio.h>
//动态规划方法
int main() {
    int m,n,i,j;
    int dp[10][10]={0};
    while (scanf("%d%d", &m, &n) != EOF) {
        for(i=0;i<=m;i++)
        {
            for(j=0;j<=n;j++)
            {
                if(i==0||i==1||j==1)
                    dp[i][j]=1;
                    else if(i>=j)
                    dp[i][j]=dp[i-j][j]+dp[i][j-1];
                    else dp[i][j]=dp[i][i];
            }
        }
        }
        printf("%d\n", dp[m][n]);
    }

学习代码

递归方法

(来源:https://blog.nowcoder.net/n/c9bc6821b3cd469b9cdb56469809e946;https://blog.nowcoder.net/n/38a41ddd60834504a98c7afb2ee2bbbd)

设f(m,n)为m个苹果,n个盘子的放法数目,则先对n作讨论,

当m<n:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响,即if(n>m) f(m,n) = f(m,m) 问题变成m个苹果,m个盘子的问题。也就是下面的m>=n的情况

当m>=n:不同的放法可以分成两类:

1、有至少一个盘子空着,原则上相当于f(m,n) = f(m,n-1) + f(m,n-2) + f(m,n-3)... 但是考虑到f(m,n-2)包含在f(m,n-1)中(这里思考下!),避免重复统计,则f(m,n) = f(m,n-1)

2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).

则总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)

递归出口条件说明: 当n=1时,所有苹果都必须放在一个盘子里,所以返回1; 当m=0时,没有苹果可以放置,返回1种放法; 递归的两条路,第一条n会逐渐减少,终会到达出口n==1; 第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.

动态规划方法

(来源:https://blog.nowcoder.net/n/8a9de2612ce8433b8000be99745e81dd)

#include<stdio.h>

int main() {

    int m, n;
    int dp[11][11] = { 0 };
    while (scanf("%d%d", &m, &n) != EOF) {
        for (int i = 0; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (i == 0 || i == 1 || j == 1) {
                    dp[i][j] = 1;
                } else if (i >= j) {
                    dp[i][j] = dp[i - j][j] + dp[i][j - 1];
                } else {
                    dp[i][j] = dp[i][j - 1];
                }
            }
        }
        printf("%d\n", dp[m][n]);
    }

}

收藏点

1. 递归和动态规划都要复习到。

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

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

相关文章

Postman(七): postman应用实战

Postman(13): postman应用实战 postman应用实战 下面以微信公众平台举例&#xff1a; 第一步、先创建文件夹 第二步、打开postman&#xff0c;创建collections 第三步、设置环境变量&#xff0c;全局变量 设置环境变量&#xff1b;如下图&#xff1a; 设置全局变量&#xf…

银河麒麟V10 + 飞腾CPU编译安装 Qt5.9.9

一、准备工作 1. 下载Qt源码包 这里我们要编译的是Qt5.9.9&#xff0c;下载网址&#xff1a;https://download.qt.io/archive/qt/5.9/5.9.9/single/ 在任意空闲位置新建文件夹&#xff0c;并将源码包放到该目录下。&#xff08;这里在/home目录下新建名为Qt_Source的文件夹&a…

Unity Animancer插件(二)精确控制

一、通过名称播放动画 前面我们讲的都是直接通过动画片段的引用播放动画&#xff0c;Animancer也提供了直接通过动画名称来播放动画的方法。但这并不是推荐的使用方式&#xff0c;因为通过字符串播放比通过引用播放效率略低&#xff0c;且更难维护。 首先我们需要在角色身上挂…

2022年ACM杰出会员名单公布:23位华人学者入选

12月7日&#xff0c;2022年度ACM杰出会员&#xff08;Distinguished Member&#xff09;名单公布&#xff01; 本次评选设有三个奖项&#xff0c;分别表彰在计算机领域做出的教育贡献、工程贡献和科学贡献。 ACM创立于1947年&#xff0c;目前在全球130多个国家和地区拥有超过…

OceanBase 4.0 解读:降低分布式数据库使用门槛,谈谈我们对小型化的思考

关于作者 赵裕众 OceanBase 资深技术专家&#xff0c;2010 年加入支付宝后从事分布式事务框架的研发&#xff0c;2013 年加入 OceanBase 团队&#xff0c;目前负责存储引擎相关的研发工作。 近年来&#xff0c;随着应用场景多样化和数据量的增长&#xff0c;我们看到分布式数据…

判别分析-书后习题回顾总结

5-2 题目 理论基础 多总体的距离判别 马氏距离&#xff1a;dG2(x)(x−μ)2σ2d^{2}_{G}(x)\frac{(x-\mu)^{2}}{\sigma^{2}}dG2​(x)σ2(x−μ)2​ 取马氏距离最小的那一个&#xff0c;就属于这类。 贝叶斯判别准则 计算qtft(x)q_{t}\times f_{t}(x)qt​ft​(x) ft(x)12πσ…

001:Object-C介绍、创建第一个iOS工程、MVC架构

常见APP基础业务模块&#xff1a; 常见App类型&#xff1a;通信与存储、流媒体、直播技术、图片处理、内容展示、Web、组件化、IM类型、音视频、直播类型、摄影摄像类型、资讯类型、工具、购物类型。 App 展示界面动画&#xff1a;底部TabBar、Navigation、列表、图片ImageVi…

一文囊括Ceph所有利器(工具)

原文链接: 知乎专栏: 一文囊括Ceph所有利器(工具) - 知乎 前言 ceph的工具很多&#xff0c;包括集群管理与运维&#xff0c;还有性能分析等等。 所以本文期望应收尽收所有的工具&#xff0c;也当做自己的一个梳理与总结&#xff0c;当自己需要的时候知道有哪些利器可以使用…

一文搞懂SSL/TLS

SSL/TLS1. 概述2. 协议组成2.1 握手协议&#xff08;Handshake protocol&#xff09;2.2 记录协议&#xff08;Record Protocol&#xff09;2.3 警报协议&#xff08;Alert Protocol&#xff09;3. 密码套件与密钥生成1. 概述 安全套接字层&#xff08;SSL&#xff0c;Secure …

使用 X2MindSpore 迁移 Pytorch 训练脚本mobileNet支持分布式训练

简介 MindSpore是华为昇腾开发的深度学习框架&#xff0c;旨在提供端边云全场景的AI框架。 Pytorch是由Facebook推出的AI框架。 本教程使用MindStudio中的X2MindSpore功能自动将Pytorch脚本转换为MindSpore脚本的案例。使用的模型是分类任务模型mobileNet&#xff0c;数据集是c…

【自动化测试】Selenium IDE脚本编辑与操作(了解)

之前&#xff0c;我们录制脚本时是录制鼠标和键盘的所有在浏览器的操作&#xff0c;那么脚本会出现多余的步骤&#xff0c;有时候我们需要手动填写脚本或修改脚本&#xff0c;所以我们有必要对selenium IDE脚本编辑与操作有所了解&#xff1b;&#xff08;采用录制的方式很容易…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园招聘管理系统968b0

毕业设计也不需要做多高端的程序&#xff0c;毕业设计对于大多数同学来说&#xff0c;为什么感觉到难&#xff0c;最重要的一个原因&#xff0c;那就是理论课到实践课的转变&#xff0c;很多人一下不适应&#xff0c;本能开始拒绝&#xff0c;如果是一个考试&#xff0c;大家都…

【大数据入门核心技术-Hbase】(一)HBase简介

目录 一、HBase基本概述 1、Hbase是什么 2、什么时候用Hbase&#xff1f; 二、HBase基本架构 1、Client 2、Zookeeper 3、HMaster 4、 RegionServer 三、HBase逻辑结构 一、HBase基本概述 1、Hbase是什么 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术…

pstore

pstore简介 pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储设…

新手教程 | 手把手教你 谷歌浏览器如何使用HTTP代理?

本文将针对谷歌浏览器如何使用代理IP进行详细说明&#xff0c;具体步骤如下&#xff1a; 1、代理IP信息查看 查看自己所购买的相对应的代理IP面板&#xff0c;点击代理IP -查看详情-进行查看“AuthKey”以及“AuthPwd”信息。 2、代理IP资源提取 在控制台-代理IP-中的“提取…

Spring cloud Gateway 服务网关 实战

Spring cloud Gateway 服务网关一、简介优点&#xff1a;特性&#xff1a;总结&#xff1a;二、核心概念三、路由规则1、Path2、Query3、Method4、Datetime5、RomoteAddr6、Header四、动态路由1、依赖2、配置动态获取URI服务名称转发五、过滤器1、网关过滤器 GatewayFilter局部…

Allegro如何给差分过孔添加禁布操作指导

Allegro如何给差分过孔添加禁布操作指导 Allegro支持给差分过孔添加禁布,让它避让周围的铜皮,具体操作如下 以下图两个过孔为例,需要做一个和via避让铜皮尺寸一样大的禁布 选择show element命令 Find选择Other segs 鼠标移动到铜皮避让圆形的地方 出现一个report,记住…

【并发编程】SemaphoreCountDownLatchCyclicBarrier

一、Semaphore Semaphore 通常又被称为信号量&#xff0c; 可以用来控制同时访问特定资源的线程数量&#xff0c;通过协调各个线程&#xff0c;以保证合理的使用资源。 1.简单的使用 1-1.控制线程的并发连接数 public static void main(String[] args) {// 只允许两个线程执…

中英翻译《动物看见了什么》

What animals see 动物看见了什么 一、Pre-reading activity 阅前思考 1.What animals do you like? 你喜欢什么动物&#xff1f; 2.Do you have any animals in your home? 你家里有动物吗&#xff1f; 3.Do you think most animals can see as well as we can? 你认为大多…

Windows下docker安装

安装 1.打开Hyper-V &#xff0c;在"启用或关闭Windows功能" 如果这里的Hyper-V平台灰色不能勾选 显示无法安装Hyper-v该固件中的虚拟化支持被禁用&#xff0c;则需要开启 开始方式&#xff1a; 重启电脑进入BIOSS界面 点击高级–>CPU设置 —> Intel virtu…