美团笔试-小美的元素删除

2023-11-01

小美的元素删除

小美有一个数组,她希望删除k个元素,使得剩余的元素两两之间互为倍数关系。你能告诉小美有多少种删除方案吗?

由于答案过大,请对10^9+7模。

输入描述

第一行输入两个整数n,k(1<=k<=n<=10^3)表示数组长度,删除的元素数量。

第二行输入n,k个整数表示数组a(1<=ai<=10^9)。

保证给定的数组中不存在两个相等元素。

输出描述

输出一个整数表示答案。

示例1

输入

6 4
1 4 2 3 6 7

输出

8

说明

方案1:删除1,4,2,7。

方案2:删除1,4,3,7。

方案3:删除1,3,6,7。

方案4:删除4,2,3,6。

方案5:删除4,2,3,7。

方案6:删除4,2,6,7。

方案7:删除4,3,6,7。

方案8:删除2,3,6,7。

思路

我们先将所有的数从小到大进行排序,再记录每一个数的约数的索引

接着定义dp数组 :dp[i][j] = 为以i为结尾的,长度为j的数组中可以相约的数的数量

我们可以得到状态转移方程: dp[i][j] = 所有的dp[p][j-1]之和(p为i的约数)

最后我们累加 dp[i][n-k]即可。

代码

import java.util.*;

public class test {
    static final int MAXN = 1005;
    static final int MOD = 1000000007;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();

        int keep = n-k;

        int[] a = new int[MAXN];
        for(int i = 1 ;i<=n;i++){
            a[i] = scanner.nextInt();
        }

        Arrays.sort(a,1,n+1);
        List<Integer>[] yueshu = new ArrayList[MAXN];
        for(int i=1;i<=n;i++){
            yueshu[i] = new ArrayList<>();
        }

        for(int i=2;i<=n;i++){
            for(int j=1;j<i;j++){
                if(a[i]%a[j] == 0){
                    yueshu[i].add(j);
                }
            }
        }

//        定义dp[i][j] = 为以i为结尾的,长度为j的数组中可以相约的数的数量
        long[][] dp = new long[MAXN][MAXN];
        for(int i=1;i<=n;i++){
            dp[i][1] = 1;  //以i为结尾的,长度为1的数组中可以相约的数的数量为1
        }
        for(int i = 1;i<=n;i++){
            for (int j=2;j<=keep;j++){ // keep为需要保存的数字的个数
                for(int p : yueshu[i]){
                    dp[i][j] = dp[p][j-1] + dp[i][j];
                }
            }
        }

        int ans = 0;
        for (int i = 1;i<=n;i++){
            ans = (int) ((ans+dp[i][keep]) % MOD);
        }

        System.out.println(ans);
    }
}

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

美团笔试-小美的元素删除 的相关文章

随机推荐

  • Linux中的叹号命令

    http blog sina com cn s blog 531bb76301013ulf html 整天在shell环境下操作 不积累点快捷输入的小技巧是不行的 最常用的技巧恐怕就是Tab自动补全以及上方向键来回退上几条历史命令了 这些对
  • linux默认系统进程

    http blog chinaunix net uid 7553302 id 64864 html linux启动后 默认有以下系统进程 Init 1 Linux的第一个进程 也是其它所有进程的父进程 events 0 5 处理内核事件守护
  • Python生成器推导式创建元组

    从形式上看 生成器推导式与列表推导式类似 只是生成器推导式使用小括号 列表推 导式直接生成列表对象 生成器推导式生成的不是列表也不是元组 而是一个生成器对象 我们可以通过生成器对象 转化成列表或者元组 也可以使用生成器对象的 next 方法
  • mysql存储引擎性能比较

    前言 今天看到有人面滴滴被问到知不知道mysql的引擎然后说不会被直接告知面试结束 然后想想自己mysql引擎也只是知道那么一两个还说不全 就想说在这里做个总结 凌晨三点半了 在数据库中存的就是一张张有着千丝万缕关系的表 所以表设计的好坏
  • git 合并多个commit(goland)

    用命令合并 commit 多多少少有点麻烦 发现一个更快速的方法 如何利用 goland 快速 合并多个commit 点击 goland 左下角 git 按钮 会显示你的 gitlog 下图是你的 gitlog 按住 ctrl 然后点击你想
  • Linux安装tomcat8详细步骤

    1 下载tomcat http tomcat apache org 我下载的是 apache tomcat 8 0 50 tar gz 2 用root用户登陆Linux 在usr local 下创建tomcat文件夹 mkdir usr l
  • Hill密码的加密与解密

    Hill密码原理 首先随机生成或选取一个密钥矩阵 该矩阵必须是可逆的 过程如下图所示 在加密过程中 先将明文分为三个字母一组 不足的用 X 代替 然后将其转化成数字 如0 A 得到每个字母所对应的数字 再与密钥矩阵相乘 得到的数字转成字母
  • BUCK/BOOST电路原理分析

    Buck变换器 也称降压式变换器 是一种输出电压小于输入电压的单管不隔离直流变换器 图中 Q为开关管 其驱动电压一般为PWM Pulse width modulaTIon脉宽调制 信号 信号周期为Ts 则信号频率为f 1 Ts 导通时间为T
  • python自动化写入word文件

    工具包使用python docx Github页面 https github com python openxml python docx 官网教程 https python docx readthedocs io en latest in
  • K8S的架构及工作原理

    1 Master和Node 1 Master K8S中的Master是集群控制节点 负责整个集群的管理和控制 在Master上运行着以下关键进程 kube apiserver 提供了HTTP Rest接口的关键服务进程 是K8S里所有资源的
  • unix 时间戳 c语言,C语言实现字符转unix时间戳

    在PHP中把字符串转成Unix时间戳是多么的方便 一个strtotime 函数就搞定了 而C语言实现就麻烦很多了 需要先转成tm类型 再得到它的Unix时间戳 附上实现代码 include include int strtotime cha
  • libcurl库的下载和安装

    目录 1 下载 2 解压 3 查看README 查看curl 1 4 查看INSTALL md 查看 configure help 5 配置configure 6 编译 拿下载安装libcurl库为例 1 下载 下载网址 单击一下这个文件
  • 算法入门篇:排序算法(一)

    引子 笔者刚刚学习自己的的一门编程语言 C语言 的时候 正在runoob上面刷经典一百道题 第一次见到排序问题 我内心是不屑的 这 不是张口就来 然后我就贡献了一整个下午的时间在一个简单的排序上面 初学者不知到排序的时候可以有交换两个值这样
  • js逆向_知识小结

    目录 一 Chrome之调试小结 chrome查看资源文件 chrome关联本地文件夹 chrome重写js文件并替换 chrome新建js文件并执行 Console打印输出勾选 断点 DOM 事件 xhr debugger 调用栈Call
  • Apex List

    请访问https trailhead salesforce com en users strailhead trailmixes prepare for your salesforce platform developer i creden
  • Probabilistic Knowledge Transfer for Deep Representation Learning(2018)----论文笔记

    Probabilistic Knowledge Transfer for Deep Representation Learning 写在前面 Abstract 1 Introduction 后续存在问题 本文提出的方法 优点 贡献 2 Re
  • BES2300x笔记(15) -- 提示音制作秘籍

    哈喽大家好 这是该系列博文的第十五篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 常见的TWS耳机产品中 我们极少会看到有LED灯指示 即便在板子上预留了LED 也只是用在调试阶段 实际量产时直接空贴 因为一个LED就足以
  • 【满分】【华为OD机试真题2023 JAVA&JS】最多等和不相交连续子序列

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最多等和不相交连续子序列 知识点贪心 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个数组 我们称其中连续的元素为连续子序列 称这些元素的和为连续子序列的
  • java泛型代码编写

    java泛型代码编写 泛型的由来 我们先看下面这段代码 List list new ArrayList list add 24 向集合中添加一个 Integer 类型的数据 list add Tom 向集合中添加一个 String 类型的数
  • 美团笔试-小美的元素删除

    小美的元素删除 小美有一个数组 她希望删除k个元素 使得剩余的元素两两之间互为倍数关系 你能告诉小美有多少种删除方案吗 由于答案过大 请对10 9 7模 输入描述 第一行输入两个整数n k 1 lt k lt n lt 10 3 表示数组长