完美序列(二维dp)

该博客讨论了如何计算完美序列,即序列中每个元素是其后续元素的因子。通过介绍一个二维动态规划的解决方案,解释了状态转移方程和如何通过打表来解决这个问题。博主分享了样例输入和输出,并以3 2和6 4为例详细说明了解题思路。
摘要由CSDN通过智能技术生成

题目描述
已知一个长度为l的序列:b1,b2,b3,…,bl (1<=b1<=b2<=b3<=…<=bl<=n)。若这个序列满足每个元素是它后续元素的因子,换句话说就是对于任意的i (2<=i<=l)都满足bi%bi-1=0 (其中“%”代表求余),则称这个序列是完美的。你的任务是对于给定的n和l,计算出一共有多少序列是完美序列。由于答案很大,所有输出答案对1000000007取余后的结果。

输入
输入的第一行为一个正整数T (T<=1000),代表一共有T组测试数据。

每组测试数据包含两个正整数n,l (1<=n, l<=2000),分别代表序列中元素大小的最大值和序列的长度。

输出
对于每组测试数据,输出一行包含一个整数,代表答案对1000000007取余后的结果。

样例输入
3
3 2
6 4
2 1
样例输出
5
39
2

ps:

这个题目真的看了好久好久…

原来这是一个二维dp,但是题解都看得很费劲。

  • 首先明确dp[i][j]表示长度为i,最后一个数为j的序列的种数
  • bi%bi-1=0 (i-1)是下标,这句话的意思是,对于任意的i,前一个数是后一个数的因子
  • 状态转移方程
    dp[i+1][p]=dp[i+1][p]+dp[i][x];//p是x的倍数

打表

在这里插入图片描述
我们拿3 2举个例子,长度为2且最大值为3代表最大值可以为1 2 3,那么就有
下面都是符合3 2这组数据的

  • 1 1

  • 1 2

  • 2 2

  • 1 3

  • 3 3
    都是长度为2 ,且最大值为3,且前一个数是后一个数的因子,我们把它们结合起来就是

  • 长度为2最大值为1,—— 2 1(1 1)

  • 长度为2最大值为2,—— 2 2(1 2,2 2)

  • 长度为2最大值为3,—— 2 3(1 3,3 3)
    把它们加起来就是答案了
    1+2+2=5

在这里插入图片描述

  • 以6 4为例,值为a[6][4]+a[5][4]+a[4][4]+a[3][4]+a[2][4]+
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值