http://codeforces.com/problemset/problem/414/B
题目挺不错的。留个纪念,活动脑筋不错的题目
#include<iostream> #include<cstdio> #include<list> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<stack> #include<map> #include<vector> #include<cmath> #include<memory.h> #include<set> #define ll long long #define eps 1e-8 #define inf 0xfffffff const ll INF = 1ll<<61; using namespace std; //vector<pair<int,int> > G; //typedef pair<int,int > P; //vector<pair<int,int> > ::iterator iter; // //map<ll,int >mp; //map<ll,int >::iterator p; #define MOD 1000000007 vector<int> G[2555]; int dp[2555][2555]; void init() { for(int i=1;i<=2000;i++) for(int j=1;j<=i;j++) if(i%j == 0) G[i].push_back(j); } int main() { init(); int n,k; scanf("%d %d",&n,&k); for(int i=1;i<=n;i++) dp[1][i] = 1; for(int i=2;i<=k;i++) { for(int j=1;j<=n;j++) { for(int kk=0;kk<G[j].size();kk++) { int tmp = G[j][kk]; dp[i][j] += dp[i-1][tmp]; dp[i][j] %= MOD; } } } int ans = 0; for(int i=1;i<=n;i++) ans = (ans + dp[k][i])%MOD; printf("%d ",ans); }
版权声明:本文博主原创文章,博客,未经同意不得转载。