题目

输入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)的更多相关文章

  1. AirBnB春招笔试题

    试题说明 笔试题只有一道,限时1小时. 模拟一个战争外交游戏,游戏中定义了三种操作: A city1 Hold : 军队A 占领了city1 A city1 Move city2 : 军队A从city ...

  2. 2019 美团java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美团等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美团,入职一年时间了,也成为了面试官,之 ...

  3. TX2017秋招笔试题之编码

    问题描述: 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, - -, ...

  4. 笔试题:求第M个到第N个素数之间全部素数

    题目描写叙述 令Pi表示第i个素数. 现任给两个正整数M <= N <= 10000,请输出PM到PN的全部素数. 输入描写叙述: 输入在一行中给出M和N,其间以空格分隔. 输出描写叙述: ...

  5. (笔试题)N!的三进制数尾部0的个数

    题目: 用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 思路: 这道题与上一篇博文N!尾部连续0的个数的思路是一样的. 计算N!下三进制结果末尾 ...

  6. Microsoft2013校园招聘笔试题

    Microsoft2013校园招聘笔试题 继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently ...

  7. 2018春招-今日头条笔试题-第四题(python)

    题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) #-*- coding:utf-8 -*- class Magic: ''' a:用于存储数组a b:用于存储数组b num:用于 ...

  8. 2018春招-今日头条笔试题-第三题(python)

    题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出‘1234567890’,对于输入表达试获得对应的结果利用python内置函数eval ...

  9. 2018春招-今日头条笔试题-第二题(python)

    题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 利用深度优先搜索 #-*- coding:utf-8 -*- class DFS: ''' num:用于存储最后执行次 ...

随机推荐

  1. win10 + Ubuntu 20.04 LTS 双系统 引导界面美化

    版权声明:本文为CSDN博主「ZChen1996」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/ZChen1 ...

  2. linux系统相关参数查询(内存,磁盘,CPU)

    1.服务器型号:dmidecode -s system-product-name 出厂日期:dmidecode -s bios-release-date 2.磁盘大小:parted -l 3.物理内存 ...

  3. “程序包com.sun.org.apache.xml.internal.security.utils不存在”的问题

    方法一(eclipse): 网上大神的回答: 自己写的程序是不建议用com.sun这个玩意儿的..这东西属于“Deprecated and restricted API”.. 而且各种com.sun的 ...

  4. linux线程控制-2(线程控制函数)

    记录肖堃老师讲解的linux线程 1. 创建线程 int pthread_create( (pthread_t *thread, pthread_attr_t *attr, void *(*start ...

  5. 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

    '''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...

  6. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

    Linux下安装MySQL执行scripts/mysql_install_db --user=mysql脚本时,报错如下: Filling help tables...2019-12-24 16:46 ...

  7. IdentityServer4网页(单点)登陆入门

    前言 本篇说说ids中的网页登陆以及单点登陆的大致原理,主要是以基本跑通为目的,下一篇开始会详细说明集成ids网页登陆原理. 最好先熟悉以下知识: asp.net core asp.net core的 ...

  8. eclipse android程序运行报错:Conversion to Dalvik format failed: Unable to execute dex:

    [2013-06-19 16:59:01 - Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support ...

  9. android Studio(3.1) 常用快捷键

    说  明 快捷键 全部保存 Ctrl + S 最大话/最小化编辑器 Ctrl + Shift + F12 搜索内容(包括代码和菜单) 按两次Shift 查找 Ctrl + F 查找下一个 F3 查找上 ...

  10. P1082 同余方程(拓展欧几里德)

    题目描述 求关于xx的同余方程 a x \equiv 1 \pmod {b}ax≡1(modb) 的最小正整数解. 输入输出格式 输入格式: 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出 ...