Lien titre: https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1539
Sujet
La séquence parfaite est définie comme la longueur de l, la valeur maximale ne dépasse pas n et dans l'ordre croissant, puis la précédente est un facteur de la suivante.
Donnez-vous n et l, et demandez combien de séquences parfaites vous avez pour modulo 1e9 + 7
Idées
dp prétraitement, dp [i] [j] signifie que la longueur est i, le dernier chiffre est le nombre de séquences parfaites comme j, k commence à partir de j puis j * 2, j * 3, jusqu'à la limite supérieure n, ici k peut être utilisé comme bit suivant d'une séquence parfaite avec j à la fin, donc dp [i] [k] est l'accumulation de dp [i-1] [j] (1 <= j <= n).
Enfin, une suite parfaite dont la longueur maximale de l ne dépasse pas n est requise, alors c'est l'accumulation de dp [l] [i] (1 <= i <= n).
code AC
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1e9 + 7;
int dp[2021][2021];
int main(){
int t; scanf("%d", &t);
for(int i = 1; i <= 2020; i ++) dp[1][i] = 1;
for(int i = 2; i <= 2020; i ++){
for(int j = 1; j <= 2020; j ++){
for(int k = j; k <= 2020; k += j){
dp[i][k] = (dp[i][k] + dp[i - 1][j]) % mod;
}
}
}
while(t --){
int n, l;
scanf("%d%d", &n, &l);
int ans = 0;
for(int i = 1; i <= n; i ++) ans += dp[l][i], ans %= mod;
printf("%d\n", ans);
}
return 0;
}