【codeforces 415D】Mashmokh and ACM
题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0
输入n,k(1<=n,k<=2000),问满足【数列长度是k && 数列中每一个元素arr[i]在1~n之间 && 数列中元素可以重复】的数列有多少个?结果对10^9+7取余
解题思路:dp[i][j]表示长度是j,最后一位是i的种数
if(kk%i==0) dp[kk][j+1]+=dp[i][j]
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int mod=1e9+7; 4 int dp[2010][2010]; 5 int main() 6 { 7 int n, k; 8 scanf("%d%d", &n, &k); 9 memset(dp, 0, sizeof(dp)); 10 for(int i=1; i<=n; i++) dp[i][1] = 1; 11 for(int i=1; i<=n; i++){ 12 for(int kk=i; kk<=n; kk+=i){ 13 for(int j=2; j<=k; j++){ 14 dp[kk][j] = (dp[kk][j]+dp[i][j-1])%mod; 15 } 16 } 17 } 18 int ans=0; 19 for(int i=1; i<=n; i++) ans = (ans+dp[i][k])%mod; 20 printf("%d\n", ans); 21 return 0; 22 }
时间: 2024-10-04 22:13:55