网易笔试:小易喜欢的数列

2024-05-14 16:18

本文主要是介绍网易笔试:小易喜欢的数列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网易笔试:小易喜欢的数列(终于不超时了)

题目描述

小易非常喜欢拥有以下性质的数列:
1、数列的长度为n
2、数列中的每个数都在1到k之间(包括1和k)
3、对于位置相邻的两个数A和B(A在B前),都满足(A <= B)或(A mod B != 0)(满足其一即可)
例如,当n = 4, k = 7
那么{1,7,7,2},它的长度是4,所有数字也在1到7范围内,并且满足第三条性质,所以小易是喜欢这个数列的
但是小易不喜欢{4,4,4,2}这个数列。小易给出n和k,希望你能帮他求出有多少个是他会喜欢的数列。
输入描述:
输入包括两个整数n和k(1 ≤ n ≤ 10, 1 ≤ k ≤ 10^5)

输出描述:
输出一个整数,即满足要求的数列个数,因为答案可能很大,输出对1,000,000,007取模的结果。

输入例子1:
2 2

输出例子1:
3

思路:

动态规划的思想,如果能填写出下面的表格,那么这道题的思路就理解了:

(1)、n = 3, k = 3时

123
1111
2137
3137

最后总个数 = 1 + 7 + 7

(2)、n = 3, k = 4时

123
1111
2138
31412
41412

最后总个数 = 1 + 8 + 12 + 12 = 33

java 通过40%用例,结果超时,(T_T)~
虽然结果超时,但是对于理解上面的表格还是有点帮助的。

import java.util.*;public class Main {public static int M = 1000000007;public static int solution(int n, int k) {int[][] dp = new int[k][n];for(int i = 0; i < k; i++) {dp[i][0] = 1;}for(int i = 0; i < n; i++) {dp[0][i] = 1;}// 一列一列填表for(int j = 1; j < n; j++) {for(int i = 1; i < k; i++) {for(int p = 1; p <= i+1; p++) {dp[i][j] += dp[p-1][j-1];dp[i][j] %= M;}for(int p = i + 2; p <= k; p++) {if(p % (i+1) != 0) {dp[i][j] += dp[p-1][j-1];dp[i][j] = dp[i][j] % M;}}}}int result = 0;for(int i = 0; i < k; i++) {result += dp[i][n-1];}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {int n = sc.nextInt();int k = sc.nextInt();int result = solution(n, k);System.out.println(result);}sc.close();}
}

不超时的代码:
参考自:https://www.nowcoder.com/test/question/done?tid=9942034&qid=112730#summary

import java.util.Scanner;public class Main {public static int M = 1000000007;public static int solution(int n, int k) {int[][] dp = new int[k][n];for(int i = 0; i < k; i++) {dp[i][0] = 1;}for(int i = 0; i < n; i++) {dp[0][i] = 1;}for(int j = 1; j < n; j++) {// 先求前一列的和int sum = 0;for(int i = 0; i < k; i++) {sum = (sum + dp[i][j-1]) % M;}// 对于(i+1)的倍数,都不用计算,需要从sum中减掉for(int i = 0; i < k; i++) {int sum_invalid = 0;int p = 2;while(p * (i+1) <= k) {sum_invalid = (sum_invalid + dp[p*(i+1)-1][j-1] ) % M;p++;}dp[i][j] = (sum - sum_invalid + M) % M;}}// 最后一列求和int result = 0;for(int i = 0; i < k; i++) {result += dp[i][n-1];result %= M;}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();int result = solution(n, k);System.out.println(result);sc.close();}
}

注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭~

这里写图片描述

这篇关于网易笔试:小易喜欢的数列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989224

相关文章

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

两道笔试题

“char a='\72'”是什么意思? 这么理解:\为转义字符,\072转义为一个八进制数072,也就是十进制数的58买一送一,将转义字符对照表也一并贴给你吧:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答

某公司笔试编程题

参加了某公司编程题,这些题都来自牛客网,记录总结吧! 一、蛇形矩阵 题目描述 蛇形矩阵是有1开始的自然数依次排列成的一个上三角矩阵. 接口说明 void GetResult(int Num, int* pResult);输入参数:int Num :输入的正整数N输出参数:int *pResult: 指向放蛇形矩阵的字符串指针指针指向的内存区域保证有效 样例输入: 4

CVTE java web后台实习生笔试+技术一面总结

投的第一份简历,也可以说是第一次写笔试和参加面试。题在前面,总结在最后,努力不骗人。 笔试 题型:20道不定项选择题+2道算法题+1道架构设计题 选择题 选择题出的很全面,因为是不定项选择,一道题就可以考很多知识点。 当时做的时候以为笔试都是这么难,做完实验室同学告诉我这个算比较难的了,而且据我观察可能是跟春招找正式offer的一批难度的题。可能最后过的标准不一样吧。 选项信息量很大,

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

C++笔试强训12、13、14

文章目录 笔试强训12一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训13一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训14一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训12 一、选择题 1-5题 引用:是一个别名,与其被引用的实体公用一份内存空间,编译器不会给引用变量单独开辟新的空间。A错误 故选A。 A

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ