zcmu1539: perfekte Sequenz

Titellink: https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1539

Thema

Die perfekte Sequenz ist definiert als die Länge von l, der Maximalwert überschreitet n nicht und in aufsteigender Reihenfolge, und dann ist der vorherige ein Faktor des nächsten.

Geben Sie n und l an und fragen Sie, wie viele perfekte Sequenzen Sie für Modulo 1e9 + 7 benötigen

Ideen

dp Vorverarbeitung, dp [i] [j] bedeutet, dass die Länge i ist, die letzte Ziffer ist die Anzahl perfekter Sequenzen wie j, k beginnt bei j und dann j * 2, j * 3 bis zur Obergrenze n, hier k kann als nächstes Bit einer perfekten Sequenz mit j am Ende verwendet werden, also ist dp [i] [k] die Akkumulation von dp [i-1] [j] (1 <= j <= n).

Schließlich ist eine perfekte Sequenz erforderlich, deren maximale Länge von l n nicht überschreitet, dann ist es die Akkumulation von dp [l] [i] (1 <= i <= n).

AC-Code

#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;
}

 

Ich denke du magst

Origin blog.csdn.net/weixin_43911947/article/details/112722997
Empfohlen
Rangfolge