题意:给你n和k,然后找出b1, b2, ..., bl(1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n),并且对所有的bi+1%bi==0,问有多少这样的序列?
思路:dp[i][j] 表示长度为i,以j为结尾有多少。dp【i】【j】+=dp【i-1】【s】,j%s==0;
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 const int mod=1000000007; 6 7 int n,k; 8 int dp[2001][2001]; 9 10 int main() 11 { 12 scanf("%d%d",&n,&k); 13 memset(dp,0,sizeof(dp)); 14 for(int i=1; i<=n; i++) 15 { 16 dp[1][i]=1; 17 } 18 for(int i=1; i<=k; i++) 19 { 20 for(int j=1; j<=n; j++) 21 { 22 for(int s=j; s<=n; s+=j) 23 { 24 dp[i][s]+=dp[i-1][j]; 25 dp[i][s]%=mod; 26 } 27 } 28 } 29 long long ans=0; 30 for(int i=1; i<=n; i++) 31 { 32 ans+=dp[k][i]; 33 ans%=mod; 34 } 35 printf("%lld\n",ans); 36 return 0; 37 }
原文:http://www.cnblogs.com/fanminghui/p/4276319.html