[算法]美团春招笔试题C-求有趣子序列数(DP)
题目
输入n,以及长度为n的数组元素
输出数组的非空子序列中有多少个“有趣序列”mod 998244353,有趣序列指所有元素满足arr[i]%i == 0, i从0记。
例:
输入:
2
1 3
输出:
2
题解
- DP
- 状态:dp[i][j] = new long[arr.length()+1][arr.length()]表示子数组arr[0]到arr[j]有多少个长度为i的有趣序列
- 伪代码
for(j from 1 to j-1){
for(i from 1 to j){
dp[i][j]=dp[i-1][j-1]+dp[i][j-1],当arr[j]%i ==0;
dp[i][j]=dp[i-1][j-1],当arr[j]%i!=0;
}
}
- 最终所求为 对dp[i][arr.length()-1],i from 1 to arr.length() 求和。
- 上述状态转移方程可以使用滚动数组降低空间复杂度,即
- 状态:dp[i][j] = new long[arr.length()+1][2]
- 伪代码
for(j from 1 to j-1){
for(i from 1 to j){
if(j==1) {
dp[i][j]=dp[i-1][0]+dp[i][0],当arr[j]%i ==0;
dp[i][j]=dp[i-1][0],当arr[j]%i!=0;
}
if(j==0){
dp[i][j]=dp[i-1][1]+dp[i][1],当arr[j]%i ==0;
dp[i][j]=dp[i-1][1],当arr[j]%i!=0;
}
}
}
相关
关于子序列的问题,常常考虑使用子数组arr[0]到arr[i]blablabla,然后做dp。
代码
package Exam;
import java.util.Scanner;
public class MeiTuanC {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i < arr.length; ++i){
arr[i] = sc.nextInt();
}
long[][] cnt = new long[n+1][2];//滚动数组
cnt[0][0] = 1;
cnt[1][0] = 1;
cnt[0][1] = 1;
int j = 0;
for(int i = 1 ;i < arr.length; ++i){//序列尾元素idx
j = (j + 1) % 2;
for(int len = 1;len <= i + 1;++len){//子序列长度
int preJ = (j + 1) % 2;
if(arr[i] % len!=0){
cnt[len][j] = cnt[len][preJ];
}else{
cnt[len][j] = (cnt[len - 1][preJ] + cnt[len][preJ]) % 998244353;
}
}
}
long sum =0;
for(int i = 1;i <= arr.length; ++i){
sum += (cnt[i][j]) % 998244353;
}
sum %= 998244353;
System.out.print(sum);
}
}
[算法]美团春招笔试题C-求有趣子序列数(DP)的更多相关文章
- AirBnB春招笔试题
试题说明 笔试题只有一道,限时1小时. 模拟一个战争外交游戏,游戏中定义了三种操作: A city1 Hold : 军队A 占领了city1 A city1 Move city2 : 军队A从city ...
- 2019 美团java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美团等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美团,入职一年时间了,也成为了面试官,之 ...
- TX2017秋招笔试题之编码
问题描述: 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, - -, ...
- 笔试题:求第M个到第N个素数之间全部素数
题目描写叙述 令Pi表示第i个素数. 现任给两个正整数M <= N <= 10000,请输出PM到PN的全部素数. 输入描写叙述: 输入在一行中给出M和N,其间以空格分隔. 输出描写叙述: ...
- (笔试题)N!的三进制数尾部0的个数
题目: 用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 思路: 这道题与上一篇博文N!尾部连续0的个数的思路是一样的. 计算N!下三进制结果末尾 ...
- Microsoft2013校园招聘笔试题
Microsoft2013校园招聘笔试题 继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently ...
- 2018春招-今日头条笔试题-第四题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) #-*- coding:utf-8 -*- class Magic: ''' a:用于存储数组a b:用于存储数组b num:用于 ...
- 2018春招-今日头条笔试题-第三题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出‘1234567890’,对于输入表达试获得对应的结果利用python内置函数eval ...
- 2018春招-今日头条笔试题-第二题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 利用深度优先搜索 #-*- coding:utf-8 -*- class DFS: ''' num:用于存储最后执行次 ...
随机推荐
- C++最好的图形库是什么?
本文字数:1660,阅读时长大约:15分钟 世界上的GUI库多如牛毛,有的开源,有的收费,有的可以做手机app开发,有的可以做桌面应用,有的只能用在某个系统,有的支持跨平台.基于不同的编程语言,人们又 ...
- 【CQOI2018】异或序列 - 莫队
题目描述 已知一个长度为n的整数数列 $a_1,a_2,...,a_n$,给定查询参数l.r,问在 $a_l,a_{l+1},...,a_r$ 区间内,有多少子序列满足异或和等于k.也就是说,对于 ...
- unity探索者之socket传输protobuf字节流(二)
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6977935.html 上一篇主要说的是protobuf字节流的序列化和解析,将pr ...
- 笔记:Linux用户管理(补充)、权限管理、内存管理、网络管理、渗透常用命令
一.用户管理(补充) 添加用户:useradd [选项] 用户名 useradd -u 5000 -g demogroup -G root -d /home/demo -s /bin/bash dem ...
- (趣味哈哈镜)JMF中摄像头相关的问题
JMF已经非常古老了.最近由于做实验的需要,不得不使用JMF处理视频.开发使用win10系统和eclipse.使用中的问题如下: 1.首先想要使用JMF需要必须安装32位JDK,同时编译软件也需要是3 ...
- linux驱动之模块化编程
今天刚开始学习linux驱动的编写.在网上开了许多网友的博客,感觉比较好的摘抄下来,以便以后忘记可以随时查看.下面是摘抄文章的地址,非常感谢他们. http://blog.chinaunix.net/ ...
- HMM隐马尔可夫模型来龙去脉(一)
目录 隐马尔可夫模型HMM学习导航 一.认识贝叶斯网络 1.概念原理介绍 2.举例解析 二.马尔可夫模型 1.概念原理介绍 2.举例解析 三.隐马尔可夫模型 1.概念原理介绍 2.举例解析 四.隐马尔 ...
- badger 一个高性能的LSM K/V store
原文:https://colobu.com/2017/10/11/badger-a-performant-k-v-store/ github地址:https://github.com/dgraph-i ...
- 下载 golang.org/x 包出错不用代理的解决办法
原文链接:https://www.jianshu.com/p/6fe61053c8aa?utm_campaign=maleskine&utm_content=note&utm_medi ...
- 2020.5.25 第五篇 Scrum冲刺博客
Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...