题目

输入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);
}
}

最新文章

  1. Fedora 24中的日志管理
  2. 微信的redirect_uri参数错误解决办法
  3. WPF入门教程系列十二——依赖属性(二)
  4. C# 站点IP访问频率限制 针对单个站点
  5. AC日记——积木大赛 洛谷 P1969
  6. [转]C程序内存区域分配(5个段作用)
  7. sqoop导出工具
  8. 关于oracle dblink的知识。
  9. 怎么样学好C++
  10. 【百度地图API】批量地址解析与批量反地址解析(带商圈数据)
  11. java web Servlet 学习笔记 -3 会话管理技术
  12. poj:4091:The Closest M Points
  13. java实现点击图片文字验证码
  14. 每天CSS学习之!important
  15. DQN(Deep Reiforcement Learning) 发展历程(四)
  16. win10开机 依赖服务或组无法启动
  17. mysql正则表达式,实现多个字段匹配多个like模糊查询
  18. 弄懂flex布局
  19. 4 关于word2vec的skip-gram模型使用负例采样nce_loss损失函数的源码剖析
  20. 分组函数group by和Oracle中分析函数partition by的用法以及区别

热门文章

  1. HTML基础-05
  2. JavaScript基础-06-正则表达式
  3. 关于python中Enum的个人总结
  4. Pytorch_第十篇_卷积神经网络(CNN)概述
  5. 快速搭建一个Vue-cli项目(简单到爆炸)
  6. python 复制与粘贴处理笔记
  7. Ambari 邮件监控服务
  8. 谷歌蜂鸟算法对网站seo优化有何影响
  9. python习题 随机密码生成 + 连续质数计算
  10. Construct a Matrix (矩阵快速幂+构造)