迅雷2018校园招聘-数字组合问题

2023-11-15

题目

给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120

思路

首先,这道题想要通过暴力搜索是无法实现的,那么只能找规律。
根据题意找规律,构建如图所示的表。要求 f ( n , m ) f(n,m) f(n,m)的值
首先处理边界问题:第一行也就是 f ( 1 , 1 ) = 1 f(1,1)=1 f(1,1)=1,其他 f ( 1 , m ) = 0 f(1,m)=0 f(1,m)=0;
第一列, f ( n , 1 ) = 1 f(n,1)=1 f(n,1)=1;

分三种情况来讨论:(横纵坐标分别用 i , j i,j i,j表示)

第一种,当 i i i= j j j时, 首先最直接的就是直接取 i i i就是一种组合方式,而除此之外 i i i不存在其他组合情况能够使得和为 j j j。因此,我们不妨把 i i i舍去,退一步,我们关心 f ( i − 1 , j ) f(i-1,j) f(i1,j)的值,只要在这个值的基础上加上一就是 f ( i , j ) f(i,j) f(i,j)的值了。因此,当 i i i= j j j时, f ( i , j ) = f ( i − 1 , j ) + 1 f(i,j)=f(i-1,j)+1 f(i,j)=f(i1,j)+1
第二种,当 i i i> j j j时,这种情况也很简单,由于 i i i大于 j j j的部分都不能贡献组合次数,有和没有都是一样的,因此 f ( i , j ) = f ( i − 1 , j ) f(i,j)=f(i-1,j) f(i,j)=f(i1,j)
第三种,当 i i i< j j j时,这是稍微复杂一点。这时 i i i的引入是会在 f ( i − 1 , j ) f(i-1,j) f(i1,j)的基础上改变组合次数的。至于到底会引入多少个次数,其实就是确定前面的 i − 1 i-1 i1个数能够有多少中可能可以组合成 j − i j-i ji。因此这一步的递推 f ( i , j ) = f ( i − 1 , j ) + f ( i − 1 , j − i ) f(i,j)=f(i-1,j)+f(i-1,j-i) f(i,j)=f(i1,j)+f(i1,ji)
图来源于牛客网
(图来源于牛客网)

代码实现

#include"bits/stdc++.h"
using namespace std;
 
int main()
{
    int n,m;
    cin>>n>>m;
    vector<vector<int>> seq(n+1, vector<int>(m+1,0));
    for(int i=1;i<n+1;i++)
        seq[i][1]=1;
    for(int i=2;i<n+1;i++)
    {
        for(int j=2;j<m+1;j++)
        {
            if(i==j)
                seq[i][j]=1+seq[i-1][j];
            else if(i<j)
                seq[i][j]=seq[i-1][j-i]+seq[i-1][j];
            else
                seq[i][j] = seq[i-1][j];
        }
    }
    cout<<seq[n][m];
    return 0;
}

上述代码可以进一步优化,不必要求出所有的位置的值,可以使用方向递推的方式,只计算需要的位置即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迅雷2018校园招聘-数字组合问题 的相关文章

  • MOS驱动自举电容和限流电阻的选取

    自举电容选取 最近做逆变时出现了异常 使用2104驱动MOS管 蓝色为滤波后双端带载时出现的波形 一端带载时没有问题 放大波形后发现输出波形在占空比满值时垮掉 产生严重的震荡 可以看到波形顶部斜向下 我们可以推断是驱动自举电容值偏小 当占空

随机推荐

  • ARMv8-A 地址翻译技术之MMU的前世今生

    MMU的重要性不言而喻 支撑操作系统之上的各种复杂应用 但在正式讲MMU之前 我们先说说MMU的发展史 因为ARMv8 A的MMU相当复杂 直接切入正题 会显得比较枯燥 废话不多说 咱们马上开始 一 前言 关于虚拟内存系统的演变史 MMU在
  • 计划 060703

    ESOE项目暂时作为一个自娱型项目 每日投入30分钟 近期按计划完成以下工作 1 完成计划 ok 2 完成对ESOE项目的介绍 ok 060704 3 在blog发布已有的 ESOE Specification v0 1 doc 英文版 o
  • 什么是.NET架构

    什么是 NET架构 NET架构主要分为3部分 FCL Framework Class Library CTS Common Type System 其中包括Common Language Specification CLR Common L
  • 教你自制一款简单的助听器

    助听器实质上是一种低频放大器 可用耳机进行放音 当使用者用上耳机后 可提高老年者的听觉 同时可对青少年的学习和记忆能带来方便 一 工作原理 本电路由话筒 前置低放 功率放大电路和耳机等部分组成 原理电路图见图1 其印刷板电路图见图2 驻极体
  • c++面对对象基础知识

    一 类的定义格式 class calss name private data member declarations public member functions 二 构造函数 1 在程序声明对象时 将自动调用构造函数 2 c 提供两种构
  • 腾讯2017暑期实习生笔试题题解

    7个月没有刷题了 现在真的是菜到爆炸 所以来牛客水一水编程题 一 构造回文 题意 给定一个字符串s 你可以从中删除一些字符 使得剩下的串是一个回文串 如何删除才能使得回文串最长呢 输出需要删除的字符个数 输入描述 输入数据有多组 每组包含一
  • 获取配置文件中的属性

    spring boot的工程启动的时候 内部文件默认是加载classpath路径或者classpath config目录下的application properties文件的 当然也可以指定加载其它的配置文件 如何获取配置文件中的属性呢 实
  • VSCODE如何汉化成中文

    VSCODE默认是以英文显示的 对于不习惯用英文的朋友可以将VSCODE汉化成中文 小编来说下如何汉化吧 工具 原料 VSCODE 方法 步骤 1 VSCODE默认情况下是英文的 点击左侧菜单栏最底下的四方形按钮打开扩展程序界面 在输入框内
  • 微信小程序之Image那些事

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 使用场景 二 使用方式 1 动态读取image大小 2 动态设置style 3 动态赋值 总结 前言 小程序中 Image使用频率是非常高的 不同场景下
  • 深度学习移动端在线训练 --- 基于MNN的端侧Finetune实现

    在决定使用MNN实现在线训练之前 也比较了TNN NCNN 发现目前各大端侧推理引擎的训练框架都不成熟 半斤八两的状态 可能都把精力放在推理和op支持上 但是端侧训练的需求真的少么 fine tune在端侧应用难道不是刚需 端侧推理的实现相
  • 爬虫日常-selenium登录12306,绕过验证

    文章目录 前言 代码设计 前言 hello兄弟们 这里是无聊的网友 愉快的周末过去了 欢迎回到学习频道 书接上文 我们说到了再用selenium登录12306时遇到了滑块验证的问题 当前的网站几乎每家都会在登录模块添加一个认证 来规避各种爬
  • maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包 有多个不同的版本 因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的 每个显式声明的类包都会依赖于一些其它的隐式类包 这些隐式的类包会被maven间接引入进来
  • 【技术经验分享】计算机毕业设计hadoop+spark知识图谱医生推荐系统 门诊人数预测 医疗数据可视化 医疗大数据 医疗数据分析 医生爬虫 大数据毕业设计 大数据毕设

    开发技术 springboot vue js element ui spark hadoop lstm情感分析模型 KNN CNN卷积神经 线性回归 协同过滤算法 用户 物品 MLP神经网络 SVD深度学习模型 echarts python
  • CRM IFD部署更换证书 - adfs证书更换

    更换证书 导入证书 更换IIS证书 更换ADFS证书 设置服务通信证书 添加令牌签名证书和令牌解密证书 更新证书指纹 更新配置 更新CRM配置 更新ADFS信赖方元数据 好家伙 证书又到期了 前面写了CRM网站的证书的更换比较简单 这次呢大
  • 【Transformer】20、SOFT: Softmax-free Transformer with Linear Complexity

    文章目录 一 背景 二 方法 2 1 Softmax free self attention formulation 2 2 通过矩阵分解来实现低秩规范化 三 效果 本文收录于 NeurIPS 2021 论文链接 https arxiv o
  • 使用spring mvc内部集成的jackson将对象转成json格式字符串

    如果是spring boot pom xml里面已经导入了下面这个mvc环境起步依赖也可以用 下面是例子
  • 深度学习入门之如何制作npz、npy文件

    一 需求 论文 EyeTracking for everyone 中提出了iTracker神经网络 并构建了一个叫GazeCapture的数据库 将其部分数据集下载后 可以看到文件的层次结构如下图所示 其中 整个数据集的后缀名是npz 内部
  • 暑假补卷5——进程信号

    信号入门 板书 1 生活角度的信号 你在网上买了很多件商品 再等待不同商品快递的到来 但即便快递没有到来 你也知道快递来临时 你该怎么处理快递 也就是你能 识别快递 当快递员到了你楼下 你也收到快递到来的通知 但是你正在打游戏 需5min之
  • Unity3D学习(5)之工厂回收利用的3D版飞碟游戏

    这一次我们来做的任务是3D版鼠标点击鼠标的游戏 我们先来看一下游戏需求 案例研究 鼠标打飞碟 游戏设计 游戏需求 1 分多个 round 飞碟数量每个 round 都是 n 个 2 每个 round 的飞碟的色彩 大小 发射位置 速度 角度
  • 迅雷2018校园招聘-数字组合问题

    题目 给定整数n 取若干个1到n的整数可求和等于整数m 编程求出所有组合的个数 比如当n 6 m 8时 有四种组合 2 6 3 5 1 2 5 1 3 4 限定n和m小于120 思路 首先 这道题想要通过暴力搜索是无法实现的 那么只能找规律