首页 > 其他分享 >小美的数组合并(美团20240427年暑期实习笔试真题)

小美的数组合并(美团20240427年暑期实习笔试真题)

时间:2024-09-22 21:02:43浏览次数:1  
标签:cnt 真题 int 美的 美团 元素 合并 dfs 数组

题目:小美的数组合并

小美拿到了一个数组,她每次操作可以将两个相邻元素ai合并为一个元素,合并后的元素为原来两个元素之和。小美希望最终数组的最小值不小于k。她想知道有多少种不同的合并结果?

输入描述

第一行输入两个正整数n,k,代表数组大小和数组的最大值。

第二行输入个正整数ai,代表小美拿到的数组。

1<=n,k,ai<=200

输出描述

输出一个整数,代表小美可以得到多少种不同的结果。由于结果可能很大,输出对10^9+7取模的结果。

样例输入

4 4

2 3 4 5

样例输出

4

说明

可能得到的数组有:[5,4,5]、[9,5]、[5,9]、[14]这四种。

题解

记忆化搜索

首先定义:dfs(i,p)表示,从第0到 i-1个数,前面是做完合并操作的。当前从第i个位置的数开始考虑,在这样子的子问题下,有多少种合并方法。并且p表示的是,在前面做完合并的考虑操作之后,第i个数的前一个数是什么(极端情况下第0到i-1个数全合并了,也有可能第i-1个数字没有被合并,保持了原来的样子)。

那么递归的最深处的条件是什么呢?是dfs(n-1,p)吗?其实是dfs(n,p),这个时候表示从第0号元素到第n-1号元素,总共n个数字,都做完合并了,我们要考虑的子问题中的数字个数为0了,那分法就是1,但是这个时候还要看一下我们的p,也就是前面做完合并的考虑操作之后,第n号元素(其实为空因为数组就是从0到n-1)的前一个数是什么,如果这个前一个数字比k小,说明这种分法是不符合要求的,返回0,否则的话是满足要求的,返回1。

那么在dfs的中间层中,对于dfs(i,p),如果p,也就是在第0号元素到第n-1号元素考虑完合并之后,第n号元素(其实为空因为数组就是从0到n-1)的前面的那一个数,比k小,那么说明它如果不和a[i]合并的话是不行的(合并了就一定满足条件吗?交由dfs(i+1,?)去判断吧),那么dfs(i,p)=dfs(i,p+a[i]),而如果p>=k,那么就说明它无论和a[i]合并与否,都是可以的,即dfs(i,p) = dfs(i+1,p+a[i]) + dfs(i+1,p)

最后再在dfs的过程中记忆化一下,把返回值存一下dp数组做一下记忆化搜索。

(代码未经验证,但思路大概是这么个思路)

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;

vector<vector<int>> dp;
vector<int> arr;
int n, k;

int dfs(int i, int p) {
    if (i == n) {
        return p >= k ? 1 : 0;
    }
    if (dp[i][p] != -1) {
        return dp[i][p];
    }
    int cnt = 0;
    if (p >= k) {
        cnt += dfs(i + 1, arr[i]);
        cnt %= MOD;
        cnt += dfs(i + 1, p + arr[i]);
        cnt %= MOD;
    } else {
    	cnt += dfs(i + 1, p + arr[i]);
        cnt %= MOD;
    }
    dp[i][p] = cnt;
    return cnt;
}

标签:cnt,真题,int,美的,美团,元素,合并,dfs,数组
From: https://www.cnblogs.com/kevin-matrix/p/18425843

相关文章

  • 华为OD机试真题-IPv4地址转换成整数-2024年OD统一考试(E卷)
     最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。 题目描述存在一种虚拟IPv4地址,由4......
  • 历年CSP-J初赛真题解析 | 2024年CSP-J初赛完善程序(33-42)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>#include<vector>usingnamespacestd;boolisSquare(intnum){ inti=__1__; intbound=__2__......
  • 历年CSP-J初赛真题解析 | 2024年CSP-J初赛阅读程序(16-32)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;boolisPrime(intn){ if(n<=1){ returnfalse; } for(inti=2;......
  • 历年CSP-J初赛真题解析 | 2024年CSP-J初赛单项选择(1-15)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客第1题32位int类型的存储范围是()A.-2147483647~+2147483647B.-2147483647~+2147483648C.-2147483648~+2147483647D......
  • 华为OD机试真题-字符串统计及重排-2024年OD统一考试(E卷)
     最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。题目描述给出一个仅包含字母的字符串......
  • 2024年汉字小达人区级自由报名备考冲刺:往年真题练一练
    2024年第十一届汉字小达人的区级活动的时间9月25-30日正式开赛,满打满算,还有16天时间准备。还有一些孩子和家长,刚刚被老师通知可以参加这个比赛,很关心的就是现在准备汉字小达人比赛是否来得及。别想这么多了,betterlatethannever。只要参加,孩子就会有收获,何况这个比赛是免费......
  • 中国电子学会202406青少年软件编程(Python)等级考试试卷(四级)真题
    青少年软件编程(Python)等级考试试卷(四级)2024-6一、单选题(共25题,共50分)1.执行以下程序后所输出的结果是?()A   20   B   41   C   21   D   912.以下说法错误的是?()A  python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱B......
  • 中国电子学会202403青少年软件编程(Python)等级考试试卷(四级)真题
    202403Python四级真题一、选择题1、运行如下代码,若输入整数3,则最终输出的结果为?()deff(x):    ifx==1:        s=1    else:        s=f(x-1)*x    returnsn=int(input("请输入一个大于1的整数:"))print(f(n)+f(n......
  • 网络安全:腾讯云智、绿盟、美团、联想的面经
    《网安面试指南》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect《Java代码审计》htt......
  • 美团面试:binlog、redolog、undo log底层原理是啥?分别实现ACID哪个特性?(尼恩图解,史上最
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......