Codeforce 414B(递推)

来源:互联网 发布:spark mongodb python 编辑:程序博客网 时间:2024/05/24 06:05

链接:点击打开链接

题意:从1~N中选K个数,b1,b2,b3,...bk,使得bi|bi+1(1<=i<=k-1),求出所有的方法数对1000000007取余

代码:

#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const long long MOD=1000000007;long long dp[2005][2005];int main() {    long long n,k,i,j,p,ans;    while(scanf("%I64d%I64d",&n,&k)!=EOF){        memset(dp,0,sizeof(dp));        for(i=0;i<=n;i++)           //dp[i][j]的定义是末尾是i,长度是j        dp[i][1]=1;        for(i=1;i<=k;i++)        for(j=1;j<=n;j++){            for(p=j;p<=n;p+=j)      //每次加j,否则会超时            dp[p][i+1]=(dp[p][i+1]+dp[j][i])%MOD;        }        ans=0;        for(i=1;i<=n;i++){        ans=(ans+dp[i][k])%MOD;        }        printf("%I64d\n",ans);    }    return 0;}

0 0