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;
}
#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;
}
相关文章推荐
- 《将博客搬至CSDN》
- Python 字符串与unicode对象 关于与区别 encode、decode
- 顺序表查找
- iwconfig android
- socket阻塞和非阻塞的区别
- Eclipse+hibernate+mysql错误:Reading schema error解决
- 浅谈技术工程师的进步
- 错误 error C2678: 二进制“<”: 没有找到接受“const card”类型的左操作数的运算符(或没有可接受的转换)
- 秋日园博园之一-秋色宜人
- adb shell wifi
- DHCP协议与dhcpcd分析
- 浙大校赛我掉进的坑
- 脚本两连发
- java设计模式之模板方法模式Template method
- AlertDialog自定义弹出对话框
- fedora安装sun sdk
- 好汉歌——人才啊
- apt-get install安装软件问题(安装包的依赖库版本过高问题)
- 《Linux/Unix系统编程手册》读书笔记 目录
- 鸟哥LINUX学习笔记(4)