题目
题意:给出两个数n,k其中k为数组长度,n为数组里面的每个数的上限,求一共有多少个数组的数据全部满满足b[i+1]%b[i]==0
思路:对于每个数组我们可以先确定当k=1或n=1时只有一种情况,可以将数组初始化,然后可以发现对于一个指定的dp[i][j]其中i为数组长度,j为数组最大的数,可以由dp[i][z]和dp[i-1][j]得到,其中j%z==0;
所以可以得到状态转移方程:dp[i][j]=dp[i][z]+dp[i][j]
AC代码:
package 练习;
import java.util.*;
public class Main {
static Scanner sc=new Scanner(System.in);
static final int MOD=1000000007;
static int dp[][];
public static void main(String[] args) {
int n=sc.nextInt();
int k=sc.nextInt();
dp=new int [k+1][n+1];
for(int i=1;i<n+1;i++) {
dp[1][i]=1;
}
for (int i = 1; i <= k; i++){
for (int j = 1; j <= n; j++){
for (int z = j; z <= n; z+=j){
dp[i][z] = (dp[i][z]+dp[i-1][j])%MOD;
}
}
}
int ans=0;
for(int i=1;i<=n;i++) {
ans+=dp[k][i];
ans%=MOD;
}
System.out.println(ans);
}
}