您的位置:首页 > 其它

CF B. Mashmokh and ACM dp

2014-04-07 18:16 120 查看
先求出末尾为i的前一个可能是哪些数(即所有能整除i的数) ,再dp

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
typedef long long LL;
const int MOD=1e9+7,N=2002;

vector<int> vec
;
LL dp

;//长度为i,末尾为j的good数量
int main(){
int n,k;
cin>>n>>k;

for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
if(i%j==0)
vec[i].push_back(j);

dp[0][1]=1;
for(int i=1;i<=k;i++){//长度
for(int j=1;j<=n;j++){//末尾
int sz=vec[j].size();
for(int k=0;k<sz;k++){//good的前一个
dp[i][j]=(dp[i][j]+dp[i-1][vec[j][k]])%MOD;
}
}
}
LL ans=0;
for(int i=1;i<=n;i++)
ans=(ans+dp[k][i])%MOD;
cout<<ans<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: