ZCMU—1539
来源:互联网 发布:win10摄像头录像软件 编辑:程序博客网 时间:2024/05/29 08:31
1539: 完美序列
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 31 Solved: 6
[Submit][Status][Web Board]
Description
已知一个长度为l的序列:b1,b2,b3,…,bl (1<=b1<=b2<=b3<=…<=bl<=n)。若这个序列满足每个元素是它后续元素的因子,换句话说就是对于任意的i (2<=i<=l)都满足bi%bi-1=0 (其中“%”代表求余),则称这个序列是完美的。你的任务是对于给定的n和l,计算出一共有多少序列是完美序列。由于答案很大,所有输出答案对1000000007取余后的结果。
Input
输入的第一行为一个正整数T (T<=1000),代表一共有T组测试数据。
每组测试数据包含两个正整数n,l (1<=n, l<=2000),分别代表序列中元素大小的最大值和序列的长度。
Output
对于每组测试数据,输出一行包含一个整数,代表答案对1000000007取余后的结果。
Sample Input
3
3 2
6 4
2 1
Sample Output
5
39
2
【分析】
dp预处理...f[i][j]表示长度为i,当前为j的方案总数,类似筛法求素数的方法往后推方案数就可以了
首先长度为1的方案数都是1,
然后对当前f[i][j]考虑f[i+1][k]=f[i+1][k]+f[i][j],k是j的倍数
对读取的最大值n和长度l,答案就是f[l][i]的和(1<=i<=n)
【代码】
#include <stdio.h>#define MOD 1000000007int f[2010][2010]={0};void init(){//长度i,当前j for (int i=1;i<=2000;i++) f[1][i]=1;for (int i=1;i<=2000;i++)for (int j=1;j<=2000;j++)for (int k=j;k<=2000;k+=j)f[i+1][k]=(f[i+1][k]+f[i][j])%MOD;}int main(){init();int pp;scanf("%d",&pp);while (pp--){int n,m;scanf("%d%d",&n,&m);long long ans=0;for (int i=1;i<=n;i++)ans=(ans+f[m][i])%MOD;printf("%lld\n",ans);}}
0 0
- ZCMU—1539
- ZCMU—1678
- ZCMU—1605
- ZCMU—1067
- ZCMU—1607
- ZCMU—1069
- ZCMU—1611
- ZCMU—1606
- ZCMU—1774
- ZCMU—1766
- ZCMU—1752
- ZCMU—1724
- ZCMU—1623
- ZCMU—1689
- ZCMU—1667
- ZCMU—1639
- ZCMU—1668
- ZCMU—1540
- 枚举+宏定义
- HDU 3555 Bomb (数位dp)
- 文件描述符以及file结构体
- 14. hbase 更改表名
- Swift 用import AFNetworking但是显示no such module
- ZCMU—1539
- robomaster自动化打大神符(2017年版本)本文包括图像处理和树莓派与机器交互部分
- 验证码类,生成验证码
- Spring提高篇(一):Spring 所提供的过滤器和监听器
- AVL 红黑树 B(+)树 跳表 字典树 应用场景及分析
- FFMPEG学习【libavcodec】:编解码器:硬件加速器桥:VDA
- HDU 2107
- centos6.5环境下sysbench编译安装
- cocos js控件ccui.Text 和ccui.RichText获得实际大小的方法