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 ≤ 1000001≤n≤1 0 , 1≤k≤1 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 k1≤uma≤t ,t+1≤b≤A 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;
}