Niuke Question Bank 21738 Niu Niu and Array

Carne e uma matriz de tópico do
título do link afetam a
matriz de carne como esta:

1:长度为n
2:每一个数都在1到k之间
3:对于任意连续的两个数A,B,A<=B 与(A % B != 0) 两个条件至少成立一个

Quantas matrizes atendem às condições, para 1 e 9 + 7 1e ^ 9 + 71 e9+7
Formato de entrada domódulo
Insira dois inteirosn, kn, kn ,k
1 ≤ n ≤ 10 , 1 ≤ k ≤ 100000 1 ≤ n ≤ 10,1 ≤ k ≤ 1000001n1 0 , 1k1 0 0 0 0 0
Formato de
saída Saída de umaamostra de entradainteira

3 3

Saída de amostra

15

1. Determine o status f [i] [j]: f [i] [j]:f [ i ] [ j ]: Indica que o comprimento éiieu soujjO número de soluções no final de j que atendem ao significado da pergunta.
2. Transição de estado:f [i] [j] f [i] [j]f [ i ] [ j ] =f [i - 1] [a] + f [i - 1] [b] f [i-1] [a] + f [i-1] [b]f [ i-1 ] [ a ]+f [ i-1 ] [ b ] 1 ≤ a ≤ t, t + 1 ≤ b ≤ k 1 \ leq a \ leq t, t + 1 \ leq b \ leq k1umat ,t+1bA otimização K
é encontrar o prefixo e o sufixo, e então subtrair a parte da insatisfação, ou seja, subtrairb> ab> ab>a e ea n d b% a = 0 b \% a = 0b % a=0 A
resposta final é encontrar a soma cumulativa. f [n] [1 ... k] f [n] [1 ... k]F [ n- ] [ . 1 . . . K ]
Exemplo de solução que satisfaça todas as combinações

1 1 1

1 2 2
1 3 2
1 1 2
2 2 2
2 3 2 
3 2 2
3 3 2

1 3 3
1 1 3
1 2 3
2 3 3
2 2 3
3 2 3
3 3 3 
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e5 + 7, mod = 1e9 + 7;
int f[11][maxn];
int pre[maxn], stu[maxn];
int main()
{
    
    
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i = 1; i <= k; i++) f[1][i] = 1;
    
    for(int i = 2; i <= n; i++)
    {
    
    
        memset(pre, 0, sizeof pre);
        memset(stu, 0, sizeof stu);
        for(int j = 1; j <= k; j++) pre[j] = (pre[j-1] + f[i-1][j])%mod;
        for(int j = k; j >= 1; j--) stu[j] = (stu[j+1] + f[i-1][j])%mod;
        for(int j = 1; j <= k; j++)
        {
    
    
            f[i][j] = (pre[j] + stu[j])%mod;
            for(int s = j; s <= k; s += j)
                f[i][j] = (f[i][j] + mod - f[i-1][s])%mod;
        }
    }
    int ans = 0;
    for(int i = 1; i <= k; i++) ans = (ans + f[n][i])%mod;
    printf("%d\n",ans%mod);
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/Edviv/article/details/111032702
Recomendado
Clasificación